我需要在将近一百万个条目的表中进行查询,但有趣的部分只是前500名。

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

最佳答案

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

这就是为什么您不应该这样做。您应该使用Queryable.Take-然后它将执行正确的操作,并在数据库中分页。

如果您使用:

var page = query.Take(count)


(等),它将自动正确处理。

09-25 18:49
查看更多