【问题标题】:I have a list of countries. I'd like to sort it alphabetically, except for two countries which I'd like to put first我有一个国家名单。我想按字母顺序排序,除了两个我想放在第一位的国家
【发布时间】:2013-06-01 04:20:31
【问题描述】:

我有一个国家列表。我想按字母顺序对它进行排序,除了两个我想放在第一位的国家。有没有简单的修改方法

from country in Countries
orderby country.Name
select country

要做到这一点?

【问题讨论】:

  • 为什么不直接排序然后将这两个移到第一位?
  • 这是一个选项,但不是很优雅

标签: c# linq


【解决方案1】:

你可以使用这个技巧:

var ordered = Countries.OrderByDescending(c => ConditionHere)
                       .ThenBy(c => c.Name);

例如:

var priorCountries = new[]{ "Italy", "France" };
var ordered = Countries.OrderByDescending(c => priorCountries.Contains(c.Name))
                       .ThenBy(c => c.Name);

【讨论】:

    【解决方案2】:

    试试这个:

    var specialCountries = new[] { "America", "England" };
    
    from country in Countries
    orderby specialCountries.Contains(country.Name) descending, country.Name
    select country
    

    如果这不是 LINQ-to-Objects,您可能需要稍微不同地编写它才能使其工作,例如这可能有效

    from country in Countries
    orderby (country.Name == "America" || country.Name == "England") descending, country.Name
    select country
    

    【讨论】:

      【解决方案3】:

      您的原始列表,其中包含每个国家/地区。

      var originalList = new List<string> { "B", "A", "E", "D", "C", "F" };
      

      排除列表,您可以在其中在前面提供您想要的项目的顺序。

      var items = new List<string> { "E", "F" };
      

      你的结果。

      items.AddRange(originalList.Except(items)
                                 .OrderBy(q => q));
      

      【讨论】:

        【解决方案4】:

        试试这个:

        from country in countries
        orderby (country.Name = "USA" ? 0 : 1), country.Name
        select country
        

        当然,您需要更改条件,但关键是您可以在 orderby 子句中执行一些评估。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-20
          • 1970-01-01
          • 2022-01-19
          • 2016-02-14
          • 1970-01-01
          • 2019-04-14
          • 2022-01-26
          • 1970-01-01
          相关资源
          最近更新 更多