2016-06-17 9 views
0

Ich habe ein merkwürdiges Problem, wenn ich versuche, eine Liste zu sortieren, basierend darauf, ob sie einen bestimmten String-Wert enthält oder nicht. Innerhalb einer Ansicht habe ich eine Liste auf meinem Viewmodel, für die ich die Objekte anzeigen möchte, die nicht zuerst "snoozed" und dann geordnet werden, ob ihr Titel das Wort "order" enthält oder nicht. Also mein Code ist wie folgt:Linq Orderby 'Zeichenfolge enthält' verhält sich nicht wie erwartet

var sortedFaults = accountFaultContainer.Faults.Values.OrderBy(f => f.IsSnoozed).ThenByDescending(f => f.Title.ToLower().Contains("order")); 

ich dann die Schleife durch diese Liste und fügen Sie die ‚Fehler‘ zu meinem Tisch eine foreach-Schleife ...

foreach (Fault fault in sortedFaults) 

Das in einigen Fällen funktioniert, aber nicht in anderen. Ich habe versucht, diejenigen herauszufiltern, die sich nicht wie erwartet verhalten, aber es gibt keinen klaren Unterschied. Zum Beispiel wurde in einem Fall der Titel "Vollständige fehlgeschlagene Synchronisierung" sowohl vor als auch nach "Fehlgeschlagene Bestellsynchronisationen" bestellt. Aber es ist nicht so, dass sich das immer falsch verhält; In einigen Tabellen funktioniert die Bestellung.

Hat jemand schon einmal auf ein ähnliches Problem gestoßen? Oder ist etwas offensichtlich offensichtlich, dass ich vermisse? Ich kratze meinen Kopf hier!

Antwort

0

Sie bestellen zuerst von IsSnoozed, so dass Priorität hat.

.OrderBy(f => f.IsSnoozed) 
.ThenByDescending(f => f.Title.ToLower().Contains("order")); 

es in die andere Richtung rumprobieren:

.OrderBy(f => f.Title.ToLower().Contains("order")) 
.ThenByDescending(f => f.IsSnoozed); 
+0

Dank @buffjape aber ich brauche die orderby Priorität nehmen döste. Ich habe dieses Problem sogar für eine Liste, die keine 'snoozed' Elemente hat. Ich würde erwarten, dass mit diesem Code meine Liste alle nicht-snoozed Elemente mit denen, die "order" an der Spitze, gefolgt von allen snoozed Elemente mit denen, die "order" im Titel vor denen ohne enthalten, anzeigen würde – Misemefein

Verwandte Themen