LINQ to Entities - Subquery正在以块的形式回归?

时间:2015-12-19 06:59:44

标签: c# sql-server entity-framework linq

我有以下LINQ to Entities查询,其中有一个子查询。一切看起来很好,似乎数据应该回来,但事实并非如此。子查询实际上是以某种方式分块。这是查询:

from pg in PhotoGroups
join o in Opportunities
    on pg.OpportunityId equals o.Id
where o.Id == "0067000000hUBRUAA4"
select new {
    CreatedTimestampUtc = pg.CreatedDateUtc,
    DocumentType = pg.DocumentType,
    Items = (
        from p in Photos
        where p.CreatedTimestampUtc == pg.CreatedDateUtc
            && p.DocumentType == pg.DocumentType
            && p.OpportunityId == pg.OpportunityId
        select p.Full
    ),
    OpportunityName = o.Name
}

这是来自LINQPad的屏幕截图:

enter image description here

红色箭头是块边界出现的位置。奇怪的是它在创建记录时被分成几组。我的意思是我创建了这些记录,分为五个,五个,五个和四个,正如它们被分块一样。

当我在foreach循环中使用结果时,此分块最终导致问题。我不知道该怎么办,所以我愿意接受任何建议。

1 个答案:

答案 0 :(得分:0)

这是LINQ的正常行为 - 延迟执行。 默认情况下,foreach机制将在每个循环中迭代查询1项。 这里,子查询将在每个循环中执行,返回一个匿名类型,其中包含该特定子查询的结果。 如果你想要它全部添加它的ToList / Array作为1查询执行。