2014-11-20 140 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