使用 LINQ 根据另一个列表后跟一个属性对列表进行排序

本文关键字:列表 属性 一个 排序 LINQ 另一个 使用 | 更新日期: 2023-09-27 18:35:30

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

Dictionary<int, int> totalCityFilters

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

List<Flight> unsortedFlights

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

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

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

使用 LINQ 根据另一个列表后跟一个属性对列表进行排序

如果我

理解正确的话:

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

如果 totalCityFilters 的值是要首先排序的数字。