如何使用 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 在到达查询表达式末尾时不会执行查询。它只会在您调用聚合运算符(例如 Count
或 Any
)或您开始遍历结果时发送任何 SQL。即使调用 Take
也不会实际执行查询 - 例如,您可能希望之后对其进行更多过滤,这可能最终成为查询的一部分。
当您开始迭代结果时(通常使用 foreach
)- 那是 SQL 将实际发送到数据库的时间。
(顺便说一下,我认为您的 where
子句有点损坏。如果您的真实代码 有问题,那么将代码视为接近尽可能接近现实。)
关于c# - 使用 Linq 选择前 100 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296479/