如何使用Linq对通用集合进行分页?

15

我有一个 System.Generic.Collections.List(Of MyCustomClass) 类型的对象。

给定整数变量 pagesize 和 pagenumber,我该如何查询仅属于 MyCustomClass 对象的任意单个页面?


我相信你可以使用Take和Skip函数来完成这个任务。 - Jedi Master Spooky
2个回答

30

如果您已经拥有包含您想要展示的所有行的 Linq 查询,可以使用以下代码:

If you have your linq-query that contains all the rows you want to display, this code can be used:

var pageNum = 3;
var pageSize = 20;
query = query.Skip((pageNum - 1) * pageSize).Take(pageSize);

你也可以在对象上创建一个扩展方法,以便能够编写:

query.Page(2,50)

如果您想获取第2页的前50条记录,那么相关信息可以在solid code博客上找到。


5

你好,这里有一个名为PagedList的神奇东西,我是在看Rob Conery的屏幕录像时得到的。

http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/

它内置了所有跳过和取出数据的功能。

你只需要调用:

var query = from item in DB.Table
where item.Field == 1
orderby item.Field2
select item;

PagedList<MyType> pagedList = query.ToPagedList(pageIndex, pageSize);

希望这能帮到你。我现在正在使用它,对于查询实体框架的Linq来说,它的效果还不错。在使用Linq to entities时,您必须先进行Orderby排序,然后才能使用Skip和Take。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接