Linq查询缺少转换
本文关键字:转换 查询 Linq | 更新日期: 2023-09-27 18:04:32
我试图从三个表中抓取数据,但是我在最后的连接语句上得到错误,我不知道为什么。
当我有一个单一的select e.Name;
时,一切都工作得很好,但是一旦我添加了更多的变量,它就开始有这个错误问题。
不能隐式转换类型"来。这个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>
类型)。当然,不可能将这样的查询分配给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);