Я пытаюсь захватить данные из трех таблиц, однако я получаю сообщение об ошибке в заключительном заявлении о соединении, и я не уверен, почему.
Все DID работают нормально, когда у меня было одно имя select e.Name;
но как только я добавил больше переменных, у этой проблемы возникла ошибка.
Невозможно неявно преобразовать тип "System.Linq.IQueryable" в "System.Linq.IQueryable". Явное преобразование существует (вам не хватает роли?)
public ActionResult EmployeeInfo()
{
var emp = db.Employees;
var mov = db.Movies;
var moveemp = db.MovieEmployees;
IQueryable<string> query =
from m in db.Movies
join me in db.MovieEmployees
on m.ID equals me.movieID
join e in db.Employees
on me.employeeID equals e.ID
// this join gives the error
join r in db.Roles
on me.roleID equals r.ID
select new { e.Name, r.RoleType, e.Birthday, m.ID };
return View(query.Distinct().ToList());
}
Спасибо!
Вы определяете переменную query
или введите IQueryable<string>
. Но ваш запрос возвращает анонимные объекты (т. IQueryable<anonymous_type>
Имеет тип IQueryable<anonymous_type>
). Конечно, невозможно задать такой запрос для вашей переменной query
. Создать тип модели просмотра:
public class EmployeeInfoViewModel
{
public string Name { get; set; }
public DateTime Birthday { get; set; }
public int ID { get; set; }
// RoleType, etc
}
Используйте его как модель для вашего вида:
@model IEnumerable<EmployeeInfoViewModel>
и передать список этих моделей представлений в ваше представление (не забудьте использовать ключевое слово var
при определении запроса - тип запроса будет выведен из определения запроса):
var query = ....
select new { e.Name, r.RoleType, e.Birthday, m.ID };
var model = query.Distinct()
.Select(x => new EmployeeInfoViewModel {
Name = x.Name,
Birthday = x.Birthday,
ID = x.ID
}).ToList();
return View(model);
IQueryable<string>
потому что вы выбрали одно строковое значение. Теперь тип запроса изменился, но вы все еще используете переменнуюquery
же типа.