我正在尝试从三个表中获取数据,但是我在最终的连接语句中收到错误,我不确定原因。
当我有一个select e.Name;
时,所有DID都能正常工作但是一旦我添加了更多变量,它就开始出现此错误问题。
无法隐式转换类型 ' System.Linq.IQueryable'至 ' System.Linq.IQueryable&#39 ;.存在显式转换(是 你错过了一个演员?)
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());
}
谢谢!
答案 0 :(得分:1)
您正在定义query
变量或键入IQueryable<string>
。但是您的查询返回匿名对象(即它的类型为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);