使用LINQ根据另一个列表和自身属性对列表进行排序

3
以下字典表示目的地城市ID和与该城市关联的筛选器数量之间的键/值对:
Dictionary<int, int> totalCityFilters

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

List<Flight> unsortedFlights

每个Flight对象都有一堆属性,其中对我问题最相关的是DestinationIDFinalPrice。我需要创建一个新的航班列表,按照以下两个前提条件排序:
  1. 列表应该首先根据totalCityFilters的顺序进行排序,该字典的键与属性DestinationID相匹配。航班列表可能有多个具有相同DestinationID(这不是主键)的航班。
  2. 然后应根据FinalPrice属性进行排序(升序)。
但是,第二次排序不能破坏第一次排序。 我的意思是,如果B.DestinationIDtotalCityFilters中首先出现于A.DestinationID之前,则更便宜的航班(A)不能排在更昂贵的航班(B)之前。
1个回答

8
如果我理解正确的话:
var result = unsortedFlights
             .OrderByDescending(f => totalCityFilters[f.DestinationID])
             .ThenBy( f => f.FinalPrice)
             .ToList();

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

是的,就这样,非常简单,谢谢...我以为会很复杂,没想到这么简单。我不知道我们可以像那样访问字典进行排序(我找到的所有示例都使用连接),而且我并不真正知道ThenBy方法的存在。不过我已经编辑了你的答案以反映我想要的降序 :) - rfgamaral

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接