如何迭代大型查询

时间:2016-04-22 16:28:35

标签: c# entity-framework linq-to-sql entity-framework-6

我知道如何制作分页但它不符合我的要求,因为当我需要下一页分页结果时,分页的基础查询会自动更新。所以我正在寻找简单的解决方案来有效地逐个迭代查询整个查询结果。请看下面的例子。

var urls = db.Websites.Select(s => s.Website)
             .Except(db.OldWebsites.Select(s => s.Website));

foreach (var url in urls)
{
   //process items
}

我只是想知道解决方案是否真的有效地迭代整个结果与否。我不确定解决方案是逐个加载行而不将所有结果加载到内存中。

有人可以验证这一点或建议更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

是实体框架流式传输结果而不是默认缓冲。如下所示调用AsStreaming方法会发出警告:"除非使用重试ExecutionStrategy,否则查询现在默认为流式传输。

foreach (var item in db.Websites.AsStreaming()) { }

只需要注意DbContext不会保留迭代结果的引用。已经没有跟踪匿名类型或原始结果,因此它需要为实体结果调用AsNoTracking,如

db.Websites.AsNoTracking()