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

Nat*_*ugg 1 linq linq-to-entities

我想做的事似乎很简单.我想选择一些雇主,我想要包括按年和季度降序排序的最后6个季度数据记录.

考虑表达式:

var query = from e in data.Employer.Include("EmployerQuarterly")
            where e.UIAccount == 22
            select e;
Run Code Online (Sandbox Code Playgroud)

我走在正确的轨道上,因为我获得了我想要的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;
Run Code Online (Sandbox Code Playgroud)

上面的查询也有两个不希望的副作用.我现在回来了208条记录,而不是原来的7条记录,而且我不再找回任何雇主季度数据!

我不想牺牲我急切的装载.我对L2E的要求是什么?

Cra*_*ntz 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)
            };
Run Code Online (Sandbox Code Playgroud)

因为你在预测,你不再需要了Include().