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