【问题标题】:Sort a list based on another list followed by a property on itself with LINQ基于另一个列表对列表进行排序,然后使用 LINQ 对列表进行排序
【发布时间】:2012-06-01 23:58:36
【问题描述】:

以下字典表示目标城市 ID 的键/值对以及与该城市关联的过滤器数量:

Dictionary<int, int> totalCityFilters

这本字典按过滤器数量降序排列,这正是我需要的方式。然后我有一个未排序的航班列表:

List<Flight> unsortedFlights

每个Flight 对象都有一堆属性,其中与我的问题最相关的是DestinationIDFinalPrice。我需要创建一个新的航班列表,根据以下两个前提对其进行排序:

  1. 列表应首先根据totalCityFilters 的顺序排序,该字典上的键与属性DestinationID 匹配。航班列表可能有多个航班具有相同的DestinationID(这不是主键)。
  2. 然后应按FinalPrice 属性对列表进行排序(升序)。

但是,第二类不能破坏第一个。我的意思是,如果B.DestinationID 首先出现,则更便宜的航班 (A) 不能位于更昂贵的航班 (B) 之上比A.DestinationID 上的totalCityFilters

【问题讨论】:

    标签: c# linq list sorting dictionary


    【解决方案1】:

    如果我理解正确的话:

    var result = unsortedFlights
                 .OrderByDescending(f => totalCityFilters[f.DestinationID])
                 .ThenBy( f => f.FinalPrice)
                 .ToList();
    

    如果totalCityFilters 的值是您要首先订购的号码。

    【讨论】:

    • 是的,就是这样,很简单,谢谢...我期待一些大而令人困惑的事情。我不知道我们可以像这样对访问字典进行排序(我能找到的所有示例都使用了连接),而且我并不真正意识到 ThenBy 方法的存在。我编辑了你的答案以反映我想要的降序:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多