C# 我有一份国家名单。I';I’我想按字母顺序排序,除了我所说的两个国家之外';我想放在第一位

C# 我有一份国家名单。I';I’我想按字母顺序排序,除了我所说的两个国家之外';我想放在第一位,c#,linq,C#,Linq,我有一份国家名单。我想按字母顺序排序,除了我想放在前面的两个国家。有没有一种简单的修改方法 from country in Countries orderby country.Name select country 要完成此任务,请尝试以下操作: var specialCountries = new[] { "America", "England" }; from country in Countries orderby specialCountries.Contains(country.N

我有一份国家名单。我想按字母顺序排序,除了我想放在前面的两个国家。有没有一种简单的修改方法

from country in Countries
orderby country.Name
select country
要完成此任务,请尝试以下操作:

var specialCountries = new[] { "America", "England" };

from country in Countries
orderby specialCountries.Contains(country.Name) descending, country.Name
select country
from country in countries
orderby (country.Name = "USA" ? 0 : 1), country.Name
select country
如果这不是LINQ到对象,您可能需要以稍微不同的方式编写它才能工作,例如,这可能会工作

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

您可以使用以下技巧:

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);
试试这个:

var specialCountries = new[] { "America", "England" };

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

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

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

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

为什么不把它排序,然后把这两个移到第一位呢?这是一个选择,但不是很优雅