Linq Paging使用Skip并返回错误的结果

时间:2015-09-25 11:35:49

标签: c# .net linq paging

var queryResultPage = eventsResults.Results
                .Skip(pageParameters.PageSize * pageParameters.CurrentPageNumber)
                .Take(pageParameters.PageSize).ToList();

var queryResultPage = eventsResults.Results.Skip(10* 1).Take(10).ToList();

现在,如果结果中的对象数为16,则此Linq查询为。{ 仅返回6结果,它应返回10

6 个答案:

答案 0 :(得分:3)

CurrentPageNumber如果基于1只使用(CurrentPageNumber - 1)

,则应该从零开始

答案 1 :(得分:3)

您已声明要跳过前10个记录,然后取其余10个记录。如果它只包含16,那么只有16-10=6以后的剩余6个。

也许您应该使用0而不是1来初始化pageParameters.CurrentPageNumber。然后,您将跳过第一页的10 * 0条记录。

答案 2 :(得分:1)

如果您的第一页上pageParameters.CurrentPageNumber的值为1,那么它会跳过前10个结果并仅返回剩余的6个元素

答案 3 :(得分:1)

如果您希望最后一页包含最大页面长度的结果集,那么您应首先检查这是否是最后一页并获取最后<PageSize>个结果:

if (pageParameters.PageSize * pageParameters.CurrentPageNumber > eventsResults.Results.Count()
{
    var queryResultPage = eventsResults.Results.Reverse().Take(pageParameters.PageSize).Reverse();
}
else
{
    // do the paging same way you did before
}

答案 4 :(得分:1)

CurrentPageNumber应该是从零开始的

您从16个元素开始。你跳过其中的10个,留下6个。然后你最多占用10个...所以你得到6.基本上一切都按照你应该期待的方式工作

答案 5 :(得分:0)

修正了我的错误 -

  var queryResultPage = eventsResults.Results
                .Skip(pageParameters.PageSize * (pageParameters.CurrentPageNumber - 1))
                .Take(pageParameters.PageSize).ToList();
相关问题