Linq Queryable缺少一个演员?

时间:2014-05-20 22:58:10

标签: c# asp.net-mvc linq

我正在尝试从三个表中获取数据,但是我在最终的连接语句中收到错误,我不确定原因。

当我有一个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());
}

谢谢!

1 个答案:

答案 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);