我有以下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的屏幕截图:
红色箭头是块边界出现的位置。奇怪的是它在创建记录时被分成几组。我的意思是我创建了这些记录,分为五个,五个,五个和四个,正如它们被分块一样。
当我在foreach
循环中使用结果时,此分块最终导致问题。我不知道该怎么办,所以我愿意接受任何建议。
答案 0 :(得分:0)
这是LINQ的正常行为 - 延迟执行。 默认情况下,foreach机制将在每个循环中迭代查询1项。 这里,子查询将在每个循环中执行,返回一个匿名类型,其中包含该特定子查询的结果。 如果你想要它全部添加它的ToList / Array作为1查询执行。