使用 Skip 和 Take 返回错误结果的 Linq 分页

Linq Paging using Skip and Take returning wrong result

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.

CurrentPageNumber 应该是从零开始的,如果它的 1 基础只是使用 (CurrentPageNumber - 1)

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

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

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

如果您希望最后一页包含最大页面长度的结果集,那么您应该首先检查这是否是最后一页并取最后 <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
}

CurrentPageNumber 应该从零开始

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

这修复了我的错误 -

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