添加'Skip'引发异常:仅对LINQ中对实体的已排序输入支持'Skip'方法

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

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

以下代码运行良好(无需跳过),在这里我从前两个组(按相同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);

引发异常:

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

有人可以提出正确的做法吗?

c# entity-framework linq-to-entities
1个回答
5
投票

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

query.GroupBy(x => x.Id).OrderBy(YourOrderCriterion).Skip(2).Take(4).SelectMany(g => g);

错误的原因是,由于Skip通常用于分页,如果您不能保证以某种方式对数据进行排序,则用于检索第一页的顺序可能与用于随后的页面。

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