6

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

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

对于主查询中的每个唯一值ID,我想要Take(n),其中n是一些任意数字。

也就是说,我只想保留n每个唯一 ID 的第一行。

我可以得到不同ID的...

var ids = query.Select(q => q.ID).Distinct();

我可以Take(n)和其他人一起,但我很难将两者联系起来:

query = query.<FOR EACH DISTINCT ID>.Take(n);

接受的答案有效,但对于大桌子来说很慢。我写了这个问题作为后续。

4

1 回答 1

6

你可以这样做:

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

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

于 2013-09-10T21:25:25.613 回答