按字母顺序对列表进行排序,但不包括某个字母。

4

我有一个对象列表,每个对象都有一个名称。我想将列表按字母顺序排序(这很容易实现),但接着我希望以字母顺序排序的列表后面跟随任何以字母D开头的项。因此,给定以下项目:

(Apple, Door, Banana, Doorknob, Gorilla, Hammer)  

我希望将它排序为:
(Apple, Banana, Gorilla, Hammer, Door, Doorknob) 

我相信我可以使用蛮力来处理这个问题,但我希望有一种使用 OrderBy().ThenBy() 的linq方法来完成,但似乎这更适用于按照两个不同的属性进行排序。我尝试使用linq实现的目标是否可行,还是只能采用传统方式?

1个回答

10

您可以使用任何返回可排序值的表达式作为排序顺序;它不必是属性。要将所有名称以“D”开头的对象放在列表末尾,只需使用:

.OrderBy(o => o.Name.StartsWith("D") ? 1 : 0)
.ThenBy(o => o.Name)

1
你可以通过移除三元运算符来使代码更简洁。在排序时,“false”会排在“true”之前。 - gunr2171
1
@gunr2171 没错,但由于这不是直观的,我宁愿明确指出,也不想记住排序顺序。 - D Stanley
谢谢,这正是我想要的。 - user1336827

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接