简体   繁体   English

使用 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();

Now if the number of objects in Results is 16 this Linq query is returning only 6 result, where it should have returned 10 .现在,如果结果中的对象数是16此 Linq 查询仅返回6结果,它应该返回10

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

You have stated that you want to skip the first 10 records and then take 10 of the rest.您已声明要跳过前 10 条记录,然后再取其余 10 条记录。 If it only contains 16 you get only the remaining 6 since 16-10=6 .如果它只包含 16 个,那么你只会得到剩下的 6 个,因为16-10=6

Maybe you should initialize pageParameters.CurrentPageNumber with 0 instead of 1. Then you're skipping 10 * 0 records for the first page.也许您应该使用 0 而不是 1 来初始化pageParameters.CurrentPageNumber 。然后您将跳过第一页的10 * 0条记录。

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

In case you would like the last page to contain result set of maximum page length then you should first check if this is the last page and take the last <PageSize> number of results:如果您希望最后一页包含最大页面长度的结果集,那么您应该首先检查这是否是最后一页并获取最后的<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 should be zero-based CurrentPageNumber 应该从零开始

You start with 16 elements.您从 16 个元素开始。 You skip 10 of them, leaving 6. You then take up to 10 of them... so you get 6. Basically everything is working in the way you should be expecting it to你跳过其中的 10 个,留下 6 个。然后你最多拿掉 10 个……所以你得到 6 个。基本上一切都在按照你期望的方式工作

This fixed My error -这修复了我的错误 -

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM