LINQ的Enumerable.Take方法在速度方面与SQL的TOP相当吗?

时间:2013-11-06 19:17:49

标签: c# sql performance linq linq-to-sql

我需要查询近百万条目的表格,但有趣的部分只是前500名。

我想知道在查询行的末尾使用Take()方法是否是速度(和内存)优化方面的最佳选择,或者只是执行整个查询然后采用顶部元素是一样的

2 个答案:

答案 0 :(得分:5)

如果您运行Enumerable.Take,那么您正在使用linq-to-objects - 是的,它将运行整个查询并在客户端进行过滤。这将是不必要的昂贵。

这就是你不应该这样做的原因。您应该使用Queryable.Take - 然后它将做正确的事情,并在数据库中页面。

如果您使用:

var page = query.Take(count)

(等)它会自动完成。

答案 1 :(得分:2)

这取决于您的查询提供程序。如果你使用linq实体或linq到sql,linq查询将被转换为sql - 换句话说,它相当于直接使用sql。

通常在数据库的上下文中使用linq时,这就是你要做的。

相关问题