添加 'Skip' 引发异常:方法 'Skip' 仅支持 LINQ to Entities 中的排序输入
Adding 'Skip' throws exception: The method 'Skip' is only supported for sorted input in LINQ to Entities
我正在尝试获取 n 个组的所有行,同时跳过 x 个组,这样我就不必一次执行所有记录。通过这种方式,我可以实现分页以更快地加载数据。
以下代码工作正常(没有跳过),我从前 2 组(按相同 ID 分组)中获取所有记录。
IOrderedQueryable<Patient> query = query.OrderBy(r => r.Id);
IQueryable<Patient> groupedQuery = query.GroupBy(x => x.Id).Take(2).SelectMany(g => g);
但是为了实现分页,当我尝试通过以下方式添加 'Skip' 并调用 groupedQuery.ToList();
.
IQueryable<Patient> groupedQuery = query.GroupBy(x => x.Id).Skip(2).Take(4).SelectMany(g => g);
抛出异常:
The method 'Skip' is only supported for sorted input in LINQ to
Entities. The method 'OrderBy' must be called before the method
'Skip'.
有人可以建议正确的做法吗?
如果组的顺序对您来说不重要,请尝试在 Skip
之前添加一个 OrderBy()
方法,如下所示:
query.GroupBy(x => x.Id).OrderBy(YourOrderCriterion).Skip(2).Take(4).SelectMany(g => g);
错误的原因是由于Skip
通常用于分页,如果您不保证您的数据以某种方式排序,则用于检索第一页的顺序可能会有所不同从用于后续页面的顺序。
我正在尝试获取 n 个组的所有行,同时跳过 x 个组,这样我就不必一次执行所有记录。通过这种方式,我可以实现分页以更快地加载数据。
以下代码工作正常(没有跳过),我从前 2 组(按相同 ID 分组)中获取所有记录。
IOrderedQueryable<Patient> query = query.OrderBy(r => r.Id);
IQueryable<Patient> groupedQuery = query.GroupBy(x => x.Id).Take(2).SelectMany(g => g);
但是为了实现分页,当我尝试通过以下方式添加 'Skip' 并调用 groupedQuery.ToList();
.
IQueryable<Patient> groupedQuery = query.GroupBy(x => x.Id).Skip(2).Take(4).SelectMany(g => g);
抛出异常:
The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must be called before the method 'Skip'.
有人可以建议正确的做法吗?
如果组的顺序对您来说不重要,请尝试在 Skip
之前添加一个 OrderBy()
方法,如下所示:
query.GroupBy(x => x.Id).OrderBy(YourOrderCriterion).Skip(2).Take(4).SelectMany(g => g);
错误的原因是由于Skip
通常用于分页,如果您不保证您的数据以某种方式排序,则用于检索第一页的顺序可能会有所不同从用于后续页面的顺序。