我们有一个实现分页的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集很大,这可能会导致资源问题。幸运的是,这个特殊的表包含一个小行数。
还有其他人遇到过这种情况并找到了更好的解决方案吗?
答案 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();
}