13

我通过谷歌搜索发现的大多数 ASP.NET MVC 分页解决方案看起来都以 IEnumerable 集合的形式从数据库表中获取所有行,对 IEnumerable 集合执行一些分页转换,然后将结果返回到视图。我希望能够在 DB 端进行分页,但仍然有一些分页类来进行页码计算和 HTML 生成。有没有解决方案可以做到这一点?还是我一直在看的那些这样做,但我没有看到它,因为我看错了?

这是我一直在看的:

4

4 回答 4

14

看看 Gu 的Nerdinner样本。

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

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

于 2009-07-09T17:33:14.077 回答
5

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

于 2009-07-09T17:26:29.783 回答
3

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

于 2009-07-09T17:33:45.790 回答
2

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

这样,您只检索实际正在使用的数据子集

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

简单的

于 2009-07-09T17:38:25.780 回答