假设我有一个 IQueryable
,它将返回一个具有 ID
属性(列)的数据类型。
我想进一步过滤我的查询(我不想评估查询)如下:
对于来自主查询的每个唯一ID
,我想要Take(n)
,其中n
是某个任意数字。
也就是说,我只想保留每个唯一 ID 的前 n
行。
我可以获得不同的ID
...
var ids = query.Select(q => q.ID).Distinct();
我可以 Take(n)
和其他人一起,但我很难将两者联系起来:
query = query.<FOR EACH DISTINCT ID>.Take(n);
接受的答案有效,但对于大表来说速度很慢。我写了this question作为后续行动。
最佳答案
你可以这样做:
query = query.GroupBy(q => q.ID).SelectMany(g => g.Take(n));
GroupBy
将具有相同ID
的记录聚集在一起,让您将它们作为一个组来处理; SelectMany
获取每个组,将其成员数限制为 n
,然后将结果放回一个平面列表中。
关于c# - Linq 仅查询每个唯一 ID 的前 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728903/