C# 按字母顺序对列表排序,不包括字母
我有一个对象列表,每个对象都有一个名称。我试图按字母顺序对列表进行排序(这很容易完成),但我希望任何以字母D开头的项目都按照字母顺序排序。鉴于这些项目:C# 按字母顺序对列表排序,不包括字母,c#,linq,sorting,C#,Linq,Sorting,我有一个对象列表,每个对象都有一个名称。我试图按字母顺序对列表进行排序(这很容易完成),但我希望任何以字母D开头的项目都按照字母顺序排序。鉴于这些项目: (Apple, Door, Banana, Doorknob, Gorilla, Hammer) 我想将其分类为: (Apple, Banana, Gorilla, Hammer, Door, Doorknob) 我确信我可以用蛮力来处理这个问题,但我希望有一种方法可以用linq通过OrderBy()来完成。然后是by(),但这看起来
(Apple, Door, Banana, Doorknob, Gorilla, Hammer)
我想将其分类为:
(Apple, Banana, Gorilla, Hammer, Door, Doorknob)
我确信我可以用蛮力来处理这个问题,但我希望有一种方法可以用linq通过
OrderBy()来完成。然后是by()
,但这看起来更适合在两个不同的属性上排序。我想用linq做的是可能的,还是必须用老式的方法来做?您可以使用任何返回排序值作为排序顺序的表达式;它不一定是一个财产。要将名称以“D”开头的所有对象放在列表末尾,只需使用:
.OrderBy(o => o.Name.StartsWith("D") ? 1 : 0)
.ThenBy(o => o.Name)
您可以通过删除三元运算符来缩短此操作。“false”在“true”之前排序。@gunr2171 true,但由于这不是直观的,我宁愿明确,也不必记住它们的排序顺序。谢谢,这正是我想要的。