2014-11-20 142 views
4

我有一个包含名称的对象列表。我试图按字母顺序对列表进行排序(这很容易完成),但是我希望任何以字母D开头的项目按照按字母排序的列表进行排序。所以给出的项目:按字母顺序排列不包含字母的列表

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

我想这个排序为:

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

我相信我能胜任这个使用蛮力,但我希望有办法做到这一点与linq OrderBy().ThenBy(),但它看起来更像是对2种不同属性进行排序。我正在试图用linq做什么,或者我只需要以旧式的方式来做呢?

回答

10

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

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

您可以通过删除三元运算符使其缩短。 “假”在“真”之前被排序。 – gunr2171 2014-11-20 19:28:34

+1

@ gunr2171确实如此,但由于这并不直观,所以我宁愿明确一点,不必记住它们排序的顺序。 – 2014-11-20 19:31:03

+0

感谢这正是我正在寻找的东西。 – user1336827 2014-11-20 19:38:35