LINQ to Entities(实体框架)加入和.Include冲突

时间:2010-03-10 19:41:33

标签: linq linq-to-entities

我想做的事情似乎很简单。我想选择一些雇主,我想要包括按年和季度降序排序的最后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的要求是什么?

1 个答案:

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