ASP.NET MVC的分页解决方案是否在数据库中进行分页?

时间:2009-07-09 17:23:50

标签: asp.net-mvc database linq-to-sql pagination paging

我通过google搜索找到的大多数ASP.NET MVC分页解决方案看起来都是以IEnumerable集合的形式从数据库表中获取所有行,在IEnumerable集合上执行一些分页转换,然后将结果返回到风景。我希望能够在数据库端进行分页,但仍然有一些分页类来进行页码计算和HTML生成。那里有解决办法吗?或者是我一直在寻找的那些,但我没有看到它因为我看错了吗?

这是我一直在看的东西:

4 个答案:

答案 0 :(得分:14)

看看顾的Nerdinner样本。

var upcomingDinners = dinnerRepository.FindUpcomingDinners();  
var paginatedDinners = upcomingDinners.Skip(10).Take(20).ToList(); 

即使FindUpcomingDinners()获得所有即将到来的晚餐,在您在下一行中调用ToList()之前,查询不会在数据库中执行。这是在你跳过10行并且只得到下一个20之后。

答案 1 :(得分:5)

你错了。 PagedList将在数据库服务器上执行,因为它具有IQueryable扩展。

答案 2 :(得分:3)

ScottGu有一个关于在Asp.Net(包括MVC)中使用LINQ的非常好的多部分博客系列。我建议从第1部分开始阅读整个系列,但Part 3涵盖了您正在寻找的内容 - 标题为“分页查询结果”的部分专门处理数据库中的分页。

答案 3 :(得分:2)

实现一个带有@StartPage和@PageSize参数的存储过程不是更有效吗?

这样您只能检索实际使用的数据子集

只有一个名为totalCount的out参数或类似的东西,以便您知道要创建多少页链接,每个链接onclick事件都会将页码传递给javascript函数,该函数将使用更多数据异步加载div或其他HTML元素