使用Linq选择前100条记录

Zan*_*oni 23 c# linq

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

我有一张有4000万条记录的桌子.

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

var values = (from e in dataContext.table_sample
              where e.x == 1
              select e)
             .Take(100);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 29

不,在过滤之前不会返回所有值.该Take(100)最终会被送到了SQL的一部分-很可能使用TOP.

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

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

当你开始遍历结果(通常foreach) - 这是当SQL实际上将被发送到数据库.

(where顺便说一句,我认为你的条款有点破碎.如果你的真实代码出现问题,那么看到代码尽可能接近现实会有所帮助.)