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());
}

谢谢!

Linq查询缺少转换

您正在定义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);