使用Linq检索分页结果

时间:2015-09-19 23:49:23

标签: c# entity-framework linq

我想从linq的结果集中获取50-100项。我该怎么做?

情况: 我找回了最后一个结果集的最后一项的索引。我想然后抓住下一个50.我没有最后一个结果的ID只有它的索引号。

1 个答案:

答案 0 :(得分:2)

LINQ基于单向枚举的概念,因此查询都从一开始就开始。要实施分页,您必须使用SkipTake扩展名来隔离您感兴趣的项目:

int pageSize = 50;
// 0-based page number
int pageNum = 2;
var pageContent = myCollection.Skip(pageSize * pageNum).Take(pageSize);

当然,这只会设置一个IEnumerable<T>,在枚举时,将逐步执行myCollection 100次,然后在关闭之前开始返回数据50步。

如果您正在处理可以多次枚举的内容,那么这很好,但如果您正在使用只会枚举一次的内容,则不行。但是,无论如何,你无法在这种枚举上实际地实现分页,至少你已经消耗了它的那部分需要一个中间存储。

在LINQ to SQL中,这将导致一个查询尝试仅选择您要求的50条记录,这些记录将基于记录采用numSkip + numTake记录,反转排序顺序,获取numTake条记录并再次撤消。根据您设置的排序顺序以及涉及的数字大小,这可能比简单地将一堆数据拉回并在内存中过滤更昂贵。