Linq Paging使用Skip并在第一页后返回错误的结果

时间:2015-10-02 16:27:24

标签: jquery linq take

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

返回myQuery.Skip(startIndex).Take(pageSize).ToList()

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

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

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

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

1 个答案:

答案 0 :(得分:0)

你派生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(); 
}