c# - 使用 Linq 选择前 100 条记录

标签 c# linq

如何使用 Linq 返回前 100 条记录?

我有一个包含 4000 万条记录的表。

此代码有效,但速度很慢,因为将返回过滤器之前的所有值:

var values = (from e in dataContext.table_sample
              where e.x == 1
              select e)
             .Take(100);

有没有办法返回过滤?像 T-SQL TOP 子句?

最佳答案

不,这不会返回过滤前的所有值。 Take(100) 最终将成为发送的 SQL 的一部分 - 很可能使用 TOP。

当然,当您指定一个 orderby 子句时,这样做更有意义。

LINQ 在到达查询表达式末尾时不会执行查询。它只会在您调用聚合运算符(例如 CountAny)或您开始遍历结果时发送任何 SQL。即使调用 Take 也不会实际执行查询 - 例如,您可能希望之后对其进行更多过滤,这可能最终成为查询的一部分。

当您开始迭代结果时(通常使用 foreach)- 那是 SQL 将实际发送到数据库的时间。

(顺便说一下,我认为您的 where 子句有点损坏。如果您的真实代码 有问题,那么将代码视为接近尽可能接近现实。)

关于c# - 使用 Linq 选择前 100 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296479/

相关文章:

c# - 使用 ModelState MVC 进行验证

c# - 将行插入 MySQL 数据库的最有效方法

c# - 大对象堆友好的 IDictionary

c# - 为什么没有调用 IExpando.AddMethod?

c# - 使用 LINQ 连接两个不同类型的列表

vb.net - 如何将 linq 查询的结果转换为 List(Of T)

c# - ASP.NET MVC C# Google Drive API 重定向不匹配 URI

c# - 无法翻译自定义 Linq 方法

entity-framework - 如何使用 Automapper 来映射导航属性 View 模型

c# - 如何使用 IEnumerable 结果正确集成测试 Web Api Controller ?