使用以下代码:
repository.Invoices.OrderBy(i => i.Date).Skip(page * 10).Take(10)
如果我有 100 张发票,其中 50 张发票来自同一日期,那么对于前 5 页,我会得到完全相同的返回结果集(即记录 1-10)。为了解决这个问题,我还必须按唯一的键进行排序:
repository.Invoices.OrderBy(i => i.Date).ThenBy(i => i.Id).Skip(page * 10).Take(10)
是否有更“正确”的方法来确保分页按预期工作?我正在使用 SQL Server 2014,它将跳过/获取代码转换为
OFFSET x ROWS FETCH NEXT 10 ROWS ONLY
也许不是最优雅的解决方案,但是......
public class IndexedInvoice
{
public int Index {get; set;}
public Invoice Invoice {get; set;}
}
然后在你的代码中
int i = 0;
var selected = repository.Invoices.ToList().OrderBy(i => i.Date).Select(x => new IndexedInvoice(){Index = i++, Invoice = x});
然后您可以将分页连接到 Index 属性。