1

I need to query in a table of almost 1 million entries, but the interesting part is only the top 500.

I wonder if using the Take() method in the end of the query line is the best alternative in terms of speed (and memory) optimization, or it's the same thing of just doing the whole query and then taking the top elements.

4

2 回答 2

5

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

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

如果您使用:

var page = query.Take(count)

(等)它会自动正确。

于 2013-11-06T19:27:46.153 回答
2

这取决于您的查询提供程序。如果使用 linq to entity 或 linq to sql,则 linq 查询将被翻译为 sql - 换句话说,它相当于直接使用 sql。

通常在数据库上下文中使用 linq 时,您会这样做。

于 2013-11-06T19:19:58.133 回答