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