gpt4 book ai didi

c# - 使用LINQ有效地分页大型数据集

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:48 25 4
gpt4 key购买 nike

在研究使用C#(使用LINQ)实现分页的最佳方法时,大多数建议如下:

// Execute the query
var query = db.Entity.Where(e => e.Something == something);

// Get the total num records
var total = query.Count();

// Page the results
var paged = query.Skip((pageNum - 1) * pageSize).Take(pageSize);


这似乎是通常建议的策略(简化)。

对我来说,分页的主要目的是提高效率。如果我的表包含120万条其中某物==的记录,则我不想同时检索所有记录。相反,我想分页数据,抓取尽可能少的记录。但是用这种方法,似乎这是一个有争议的问题。

如果我理解正确,则第一条语句仍在检索120万条记录,然后将在必要时分页。

以这种方式进行分页是否真的提高了性能?如果要每次检索120万条记录,那又有什么意义(除了明显的UI好处之外)?

我误会吗?是否有任何.NET专家可以教我有关LINQ,分页和性能的知识(在处理大型数据集时)?

最佳答案

第一条语句不执行实际的SQL查询,它仅构建要运行的查询的一部分。

当您调用query.Count()时,第一个将被执行

SELECT COUNT(*) FROM Table WHERE Something = something


query.Skip().Take()上也不会执行查询,仅当您尝试枚举结果(对 paged进行foreach或对其调用 .ToList())时,它将执行适当的SQL语句,仅检索行页面(使用ROW_NUMBER)。

如果在SQL事件探查器中观察到此情况,您将看到恰好执行了两个查询,并且它绝不会尝试检索完整表。



使用调试器时请小心,因为如果您在第一条语句之后执行并尝试查看将执行SQL查询的 query的内容。也许这就是您误会的根源。

关于c# - 使用LINQ有效地分页大型数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28444935/

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