每个唯一ID仅查询前N行的Linq查询

6

假设我有一个返回带有ID属性(列)的数据类型的IQueryable

我想进一步过滤我的查询(我不想评估查询),如下所示:

对于主查询中的每个唯一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);

被接受的答案可以工作,但对于大型表而言速度较慢。我在这个问题的后续中提出了我的看法。

1个回答

6
你可以这样做:
query = query.GroupBy(q => q.ID).SelectMany(g => g.Take(n));

GroupBy会将具有相同ID的记录汇集在一起,让您可以将它们作为一组进行处理;SelectMany会取出每个组,将其成员数量限制为n,然后将结果放回一个平面列表中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接