使用Linq进行反向寻呼

时间:2015-03-29 13:32:55

标签: c# linq paging

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

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

如果用户在我的方法中将{1}作为currentPage发送,则页面大小为5。然后我应该能够返回11, 12, 13, 14, 15作为结果集,如果他将{2}作为currentPage发送,那么我应该返回6, 7, 8, 9, 10,依此类推。如何设置我给Skip方法的值,以便它以这种方式给我记录?是的,我也按照日期按升序排序。

2 个答案:

答案 0 :(得分: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();

实际的实现可能会因代码的设计方式等而异,但这应该可以帮助您入门。

此处使用的关键方法是:ReverseTake限制返回的金额,Skip选择起始索引。如果您使用Skip,则很可能完全避免使用Reverse

答案 1 :(得分:0)

我会这样做(使用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();