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