首页 > 解决方案 > LINQ OrderBy 基于条件

问题描述

我想根据 CityName 对 List 进行排序,以便首先出现 CityName Lahore 的记录,然后是伊斯兰堡,然后是卡拉奇。以下是供参考的源代码,

class Address {
private City;
}
class City{
private CityName;
}

我正在寻找一种使用 LINQ OrderBy 方法的方法。

标签: c#linq

解决方案


您可以使用List.IndexOf

IEnumerable<string> query = cityList.OrderBy(orderedCityList.IndexOf);

如果订单列表中不包含字符串,则IndexOf返回-1这些城市将是第一个。如果您希望它们位于列表的末尾,您可以使用以下查询:

IEnumerable<string> query = cityList
    .Select(s => new { City = s, Index = orderedCityList.IndexOf(s) })
    .OrderBy(x => x.Index >= 0 ? x.Index : int.MaxValue)
    .Select(x => x.City);

推荐阅读