0
A
回答
2
您可以通过订购的东西吧,否则你真的不能
所以它会像
mycontext.mytable
.OrderBy(item=>.item.PropertyYouWantToOrderBy)
.Skip(HowManyYouWantToSkip)
.Take(50);
2
LINQ
东西是基于单向枚举的概念,所以查询都开始在开始。为了实现分页,你将不得不使用Skip
和Take
扩展隔离您感兴趣的项目:
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
条记录并倒转再次。根据您设置的排序顺序和所涉及的数字大小,这可能比仅仅将一堆数据拉回并在内存中进行过滤要昂贵得多。
分页结果很大程度上取决于订单。因此,请始终坚持一定的顺序,以确保一切都同步。我真的不明白你的问题。如果它涉及从1 LINQ分页的结果,那么你只需要保存一个LINQ(只是一个查询 - 不是本地列表),并通过不同的跳过和获取数字来提供不同的页面。 – Hopeless