如果所有排序列值都相同,linq 分页不会返回正确的页面

问题描述 投票:0回答:1

使用以下代码:

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
c# sql-server pagination linq-to-entities
1个回答
0
投票

也许不是最优雅的解决方案,但是......

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 属性。

© www.soinside.com 2019 - 2024. All rights reserved.