2010-06-09 17 views
44

Was wäre der richtige Weg, um eine Liste von Zeichenfolgen zu sortieren, wo Elemente mit einem Unterstrich '_' am Ende der Liste stehen sollen, ansonsten ist alles alphabetisch.Benutzerdefinierte Sortierlogik in OrderBy mit LINQ

Gerade jetzt so etwas wie dies ich tue,

autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a) 

Antwort

89

zu sortieren Wenn Sie benutzerdefinierte Bestellung wollen, aber don ‚t wollen einen Vergleich zu versorgen, können Sie es haben - sQL-Stil:

autoList 
.OrderBy(a => a.StartsWith("_") ? 2 : 1) 
.ThenBy(a => a); 
+4

Ich mag diese Lösung besser. Ich vergesse immer ThenBy. –

+0

Danke. Das ist perfekt. –

+2

+1 Wirklich wie diese Lösung. Sehr schön. –

2

Verwenden Sie die Überladung von OrderBy, die eine IComparer dauert, das erste Func Argument wird den Vergleich füttern, und von dort müssen Sie die Zeichenfolgen vergleichen. Zunächst befassen sich mit dem Fall eines oder beider beginnt mit _, und dann von dort aus werden Sie wahrscheinlich strippen müssen verwenden, um die _ und nur die Standard-string.Compare sie über die erste _

+1

jedoch in aller Ehrlichkeit, obwohl technisch Ihren Ansatz ein Hack ist und scheitern kann, es ist viel einfacher und leichter zu verstehen Ihre Absicht. –