Entity framework LINQ GroupBy中缺少外键对象?
我在我的Entity framework LINQ GroupBy中缺少外键对象?,entity-framework,linq,group-by,foreign-keys,Entity Framework,Linq,Group By,Foreign Keys,我在我的LINQ查询中使用GroupBy。我的查询工作正常,只是缺少外键对象。然后,我尝试在我的查询中添加Include。以下是我的代码: public ActionResult GetEmployees() { var Emloyees = db.Employees.AsQueryable(); Emloyees.GroupBy(e=> new {e.JobTitleId, e.GenderId}) .Select(tr => new
LINQ
查询中使用GroupBy
。我的查询工作正常,只是缺少外键对象。然后,我尝试在我的查询中添加Include
。以下是我的代码:
public ActionResult GetEmployees()
{
var Emloyees = db.Employees.AsQueryable();
Emloyees.GroupBy(e=> new {e.JobTitleId, e.GenderId})
.Select(tr => new MyObject
SalaryTotal = tr.Sum(r=>r.Salary)
}).Include(tr=>tr.JobTitle).Include(tr=>tr.Gender).ToList();
}
我得到一个例外:
查询的结果类型既不是EntityType,也不是具有实体元素类型的CollectionType。只能为具有这些结果类型之一的查询指定包含路径
我试图将它添加到
GroupBy
之前,并直接添加到db.Employees.AsQueryable()
中,但没有任何效果。我做错了什么?问题是您正在使用.Select(…)进行投影,之后无法解析include。该查询的结果将是一个列表MyObject,它不适用于实际位于Employee上的includes
因此,请像这样尝试:
Emloyees
.GroupBy(e=> new {e.JobTitleId, e.GenderId})
.Select(tr => new MyObject {
SalaryTotal = tr.Sum(r=>r.Salary),
JobTitle = tr.FirstOrDefault().JobTitle,
Gender = tr.FirstOrDefault().Gender
}).ToList();
您必须使用两个附加属性扩展MyObject,但查询结果将是您想要的(我假定)。您只能对映射的实体类型使用
包含<代码>MyObject
不是映射类型。你应该把JobTitle
和Gender
作为MyObject
的一部分<代码>直接在db之后包含
。员工
将被忽略,因为最终结果不包括员工。那么解决方案是什么?我在我的MyObject
模型中有职位和性别。这就是我要找的。很好。这很好,因为组是由JobTitleId
和GenderId
完成的。