【问题标题】:Linq Paging using Skip and Take returning wrong result after first pageLinq 分页使用 Skip 和 Take 在第一页后返回错误结果
【发布时间】:2015-12-30 22:18:40
【问题描述】:

我们有一个实现分页的 jquery.jtable 页面。我们注意到分页不太正常。例如,如果总共有 17 项,则第一页正确显示 10,第二页显示 7。但是,如果总共 20 项,则第一页显示 10,第二页仅显示 8。 我们正在使用:

return myQuery.Skip(startIndex).Take(pageSize).ToList()

在第二页上,startindex = 10,页面大小 = 10,正如我上面所说,它只返回 8。罪魁祸首似乎是 .Take。我在代码上方放置了一个 if 语句,取为:

       if (myQuery.Skip(startIndex).ToList().Count() <= pageSize)
       {
          return myQuery.Skip(startIndex).ToList();
       }

在第二遍中,If 返回 true,因为 count 和 pagesize 都是 10。这里的 return 确实返回了第二页的所有 10 行。我担心的是,如果完整的 myQuery 集很大,这可能会导致资源问题。幸运的是,这个特定的表包含的行数很少。

有没有其他人遇到过这种情况并找到了更好的解决方案?

【问题讨论】:

  • 您能否使用 LINQ to Objects 用一个简短但完整的程序重现这一点?我希望它会好起来......(目前还不清楚 jquery 是在哪里出现的,顺便说一句。仅仅因为 jquery 发出请求并不意味着它是问题的一部分。我会尽可能多地隔离问题你可以,删除所有无关的方面。)

标签: jquery linq take


【解决方案1】:

你推导出 startIndex 的方式一定是罪魁祸首。试试这个:

return myQuery.Skip((pageNumber - 1 ) * pageSize).Take(pageSize).ToList();

编辑:

并确保 pageNumber 永远不会超过最大可能的页码。

var maxPages = maxRecords / pageSize + (maxRecords % pageSize > 0 ? 1 : 0);

因此,例如,您有一种方法可以仅检索特定页面所需的记录:

public List<SomeEntity> GetSomeEntityForPage(int pageNumber, int pageSize)
{
    return myQuery.Skip((pageNumber - 1 ) * pageSize).Take(pageSize).ToList(); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2013-11-26
    • 2023-03-24
    相关资源
    最近更新 更多