我想做的事情似乎很简单。我想选择一些雇主,我想要包括按年和季度降序排序的最后6个季度数据记录。
考虑表达式:
var query = from e in data.Employer.Include("EmployerQuarterly")
where e.UIAccount == 22
select e;
我走在正确的轨道上是因为我获得了我想要的7个雇主记录,并且每个记录都包含所有季度数据。现在,我所要做的就是订购数据,只选择前6条记录。
此表达式通过但不限制6来完成订单。
var query = from e in data.Employer.Include("EmployerQuarterly")
from q in e.EmployerQuarterly
where e.UIAccount == 22
orderby q.Year descending, q.Quarter descending
select e;
上面的查询也有两个不受欢迎的副作用。我现在得到208条记录,而不是原来的7条记录,我不再找回任何雇主季度数据!
我不想牺牲我急切的装载。我对L2E的要求是什么?
答案 0 :(得分:6)
您不能限制关系,因为EF不会加载部分实体化的实体。因此,如果要加载相关数据的子集,则需要投影到POCO而不是加载实体。即:
var query = from e in data.Employer
where e.UIAccount == 22
select new
{
Id = e.Id,
Name = e.Name,
// etc.
Quarterlies = (from q in e.EmployerQuarterly
orderby q.Year descending, q.Quarter descending
select new
{
Id = q.Id,
// etc.
}).Take(6)
};
因为您正在投影,所以您不再需要Include()
。