我有一个国家名单。我想按字母顺序对它进行排序,除了我想放在第一位的两个国家。有没有简单的修改方法
from country in Countries
orderby 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
如果这不是 LINQ-to-Objects,您可能需要稍微不同地编写它才能使其工作,例如这可能工作
from country in Countries
orderby (country.Name == "America" || country.Name == "England") descending, country.Name
select country
您的原始列表,其中包含每个国家/地区。
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));
尝试这个:
from country in countries
orderby (country.Name = "USA" ? 0 : 1), country.Name
select country
当然,您需要更改标准,但关键是您可以在 orderby 子句中执行一些评估。