添加“跳过”引发异常:方法“跳过”仅支持 LINQ to Entities 中的排序输入

Aje*_*sad 1 c# linq-to-entities entity-framework

我试图在跳过 x 组的同时获取 n 组的所有行,因此我不必一次执行所有记录。通过这种方式,我可以实现分页以更快地加载数据。

下面的代码工作正常(没有跳过),我从前 2 个组中获取所有记录(按相同的 Id 分组)。

IOrderedQueryable<Patient> query = query.OrderBy(r => r.Id);

IQueryable<Patient> groupedQuery = query.GroupBy(x => x.Id).Take(2).SelectMany(g => g);
Run Code Online (Sandbox Code Playgroud)

但是要实现分页,当我尝试按以下方式添加“跳过”并调用groupedQuery.ToList();.

IQueryable<Patient> groupedQuery = query.GroupBy(x => x.Id).Skip(2).Take(4).SelectMany(g => g);
Run Code Online (Sandbox Code Playgroud)

它抛出异常:

方法“跳过”仅支持 LINQ to Entities 中的排序输入。方法 'OrderBy' 必须在方法 'Skip' 之前调用。

有人可以建议正确的做法。

小智 6

如果组的顺序对您来说无关紧要,请尝试OrderBy()Skip如下之前添加一个方法:

query.GroupBy(x => x.Id).OrderBy(YourOrderCriterion).Skip(2).Take(4).SelectMany(g => g);
Run Code Online (Sandbox Code Playgroud)

错误的原因是因为Skip通常用于分页,如果您不保证您的数据按某种方式排序,那么用于检索第一页的顺序可能与用于后续页面的顺序不同。