使用 Linq 反向分页

问题描述 投票:0回答:2

我有一个场景,我必须使用 LINQ 以相反的方式获取分页记录。假设我有 15 件物品(按发布顺序排列):

1, 2, 3, 4, 5.......... 15

页面大小为 5,如果用户在我的方法中发送 1 作为

currentPage
。然后我应该能够返回
11, 12, 13, 14, 15
作为结果集,如果他发送 2 作为
currentPage
那么我应该返回
6, 7, 8, 9, 10
等等。如何设置为 Skip 方法提供的值,以便它以这种方式为我提供记录?是的,我也按日期升序排列这些物品。

c# linq pagination
2个回答
4
投票

只是一个简单的逻辑示例:

var nums = new[] {1, 2, 3, ..., 15};

var lastFew = nums.Reverse().Take(5).Reverse().ToArray();

或者作为列表:

var nums = new List<int> { 1, 2, 3, ..., 15};
nums.Reverse();
nums.RemoveRange(5); // removes from index 5 till end
nums.Reverse();

实际的实现可能会有所不同,具体取决于代码的设计方式等,但这应该可以帮助您入门。

这里使用的关键方法是:

Reverse
Take
限制返回金额、
Skip
选择起始索引。如果您使用
Skip
,您很可能可以完全避免使用
Reverse


1
投票

我会这样做(使用 EF):

var resultByDesc = db.Entities
                   .OrderByDescending(o => o.DateTime)
                   .Skip(page * itemsPerPage)
                   .Take(itemsPerPage)
                   .ToList();  // important! eager loading!
// it will be executed in your client side, not SQL.
var actualResult = resultByDesc.Reverse();
© www.soinside.com 2019 - 2024. All rights reserved.