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

时间:2013-09-10 21:17:39

标签: c# sql linq linq-to-sql

假设我有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作为后续内容。

1 个答案:

答案 0 :(得分:6)

你可以这样做:

query = query.GroupBy(q => q.ID).SelectMany(g => g.Take(n));

GroupBy汇集了相同ID s的记录,让您将它们作为一个组进行处理; SelectMany获取每个组,将其成员数限制为n,并将结果放回一个单位列表中。