C# 使用Linq的反向分页
我有一个场景,我必须使用LINQ以相反的方式获取分页记录。假设我有15个项目,按照它们的发布顺序:C# 使用Linq的反向分页,c#,linq,paging,C#,Linq,Paging,我有一个场景,我必须使用LINQ以相反的方式获取分页记录。假设我有15个项目,按照它们的发布顺序: 1, 2, 3, 4, 5.......... 15 页面大小为5,如果用户在我的方法中发送1作为currentPage。然后我应该能够返回11、12、13、14、15作为结果集,如果他将2作为currentPage发送,那么我应该返回6、7、8、9、10,依此类推。我如何设置给Skip方法的值,以便它以这种方式给我记录?是的,我也在按日期升序排列这些项目。这只是一个简单的逻辑示例: var n
1, 2, 3, 4, 5.......... 15
页面大小为5,如果用户在我的方法中发送1作为
currentPage
。然后我应该能够返回11、12、13、14、15作为结果集,如果他将2作为currentPage
发送,那么我应该返回6、7、8、9、10,依此类推。我如何设置给Skip方法的值,以便它以这种方式给我记录?是的,我也在按日期升序排列这些项目。这只是一个简单的逻辑示例:
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();
var nums=新列表{1,2,3,…,15};
nums.Reverse();
(5);//从索引5中删除,直到结束
nums.Reverse();
实际的实现可能会因代码的设计方式等而异,但这应该是您的开始
这里使用的关键方法是:反向
,采取
限制返回金额,以及跳过
选择起始索引。如果您使用Skip
,则最有可能避免同时使用Reverse
。我希望这样做(使用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();