【问题标题】:LINQ : Take after GroupByLINQ:在 GroupBy 之后
【发布时间】:2014-02-26 06:22:15
【问题描述】:

假设我们有结果列表

OriginId , DestinationName , TotalTime
1、2、700
1 , 3 , 200
1 , 4 , 300
1、5、400
2 , 2 , 100
2 , 3 , 900
2 , 4 , 300
2、5、400
3 , 2 , 100
3 , 3 , 500
3 , 4 , 300
3、5、400

public class Result 
  {
    public int OriginId {get;set;}
    public int DestinationId {get;set;}
    public int TotalTime {get;set;}
  }

我想按 OriginId 对结果列表进行分组,然后按 TotalTime 对它们进行排序,然后取 2 个destinationId 或结果。
结果应该是这样的:

OriginId , DestinationName , TotalTime
1,3,200
1,4,300
2,2,100
2,4,300
3,2,100
3,4,300


在按 OriginId 对数据进行分组后,我无法访问 TotalTime 来订购或 DestinationId 来获取。
我该怎么做?

【问题讨论】:

  • 如果你按 OriginId 对它们进行分组,你不能按TotalTime 排序,因为在每个组中你有多个TotalTimes,所以你有DestinationNames

标签: c# linq


【解决方案1】:

你的意思是这样的吗?

list.GroupBy(x => x.OriginId)
    .SelectMany(g => g.OrderBy(x => x.TotalTime).Take(2))

这应该会给你预期的输出。这是LinqPad中的结果

【讨论】:

  • 很好的答案。为 SelectMany 的这种特殊用途 +1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多