【问题标题】:Linq query for only the first N rows for each unique IDLinq 仅查询每个唯一 ID 的前 N ​​行
【发布时间】:2013-09-10 21:17:38
【问题描述】:

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

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

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

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

我可以得到独特的ID's...

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    你可以这样做:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-08
      • 2019-12-08
      • 2015-10-28
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2011-09-05
      相关资源
      最近更新 更多