gpt4 book ai didi

linq-to-sql - LINQ 是惰性评估的吗?

转载 作者:行者123 更新时间:2023-12-04 03:13:24 25 4
gpt4 key购买 nike

您好,我有以下问题。我没有找到确切的答案,这对我来说真的很有趣。假设我有以下代码从数据库中检索记录(例如,为了将其导出到 XML 文件)。

var result = from emps in dc.Employees
where emps.age > 21
select emps;

foreach (var emp in result) {
// Append this record in suitable format to the end of XML file
}

假设有一百万条记录满足 哪里代码中的条件。会发生什么?所有这些数据将在到达 foreach 构造时立即从 SQL Server 检索到运行时内存,或者将在必要时检索,第一条记录,第二条记录。换句话说,LINQ 是否真的通过迭代大型集合来处理这种情况(有关详细信息,请参阅我的 post 此处)?

如果没有,在这种情况下如何克服内存问题?如果我真的需要遍历大集合,我该怎么办?借助Count函数计算集合中实际元素的数量,然后从数据库中分小部分读取数据。有没有一种简单的方法可以使用 LINQ 框架实现分页?

最佳答案

所有数据都将从 SQL Server 中检索一次,并放入内存中。我能想到的解决此问题的唯一方法是以较小的块处理数据(例如使用 Skip() 和 Take() 的页面)。但是,当然,这需要对 SQL Server 进行更多的点击。

这是我为此编写的 Linq 分页扩展方法:

public static IEnumerable<TSource> Page<TSource>(this IEnumerable<TSource> source, int pageNumber, int pageSize)
{
return source.Skip((pageNumber - 1) * pageSize).Take(pageSize);
}

关于linq-to-sql - LINQ 是惰性评估的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4898128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com