Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq的反向分页_C#_Linq_Paging - Fatal编程技术网

C# 使用Linq的反向分页

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

我有一个场景,我必须使用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 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();