2015-09-19 66 views
0

我想从linq中的结果集中获取项目50-100。我怎么做?使用Linq检索分页结果

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

+0

分页结果很大程度上取决于订单。因此,请始终坚持一定的顺序,以确保一切都同步。我真的不明白你的问题。如果它涉及从1 LINQ分页的结果,那么你只需要保存一个LINQ(只是一个查询 - 不是本地列表),并通过不同的跳过和获取数字来提供不同的页面。 – Hopeless

回答

2

您可以通过订购的东西吧,否则你真的不能

所以它会像

mycontext.mytable 
    .OrderBy(item=>.item.PropertyYouWantToOrderBy) 
    .Skip(HowManyYouWantToSkip) 
    .Take(50); 
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条记录并倒转再次。根据您设置的排序顺序和所涉及的数字大小,这可能比仅仅将一堆数据拉回并在内存中进行过滤要昂贵得多。