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

问题描述 投票:0回答:6
var queryResultPage = eventsResults.Results
                .Skip(pageParameters.PageSize * pageParameters.CurrentPageNumber)
                .Take(pageParameters.PageSize).ToList();

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

现在,如果 Results 中的对象数量为

16
,则此 Linq 查询为 仅返回
6
结果,而它应该返回
10

c# .net linq pagination
6个回答
3
投票

您已声明要跳过前 10 条记录,然后获取其余 10 条记录。如果它只包含 16 个,那么您只能得到

16-10=6
以来剩余的 6 个。

也许您应该用 0 而不是 1 初始化

pageParameters.CurrentPageNumber
。然后您将跳过第一页的
10 * 0
记录。


3
投票
如果 1 从 1 开始,则

CurrentPageNumber
应该从 0 开始,只需使用
(CurrentPageNumber - 1)


1
投票

如果第一页上

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


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
}

1
投票

CurrentPageNumber 应从零开始

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


0
投票

这修复了我的错误 -

  var queryResultPage = eventsResults.Results
                .Skip(pageParameters.PageSize * (pageParameters.CurrentPageNumber - 1))
                .Take(pageParameters.PageSize).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.