Ich habe eine Liste, die ich nach zwei Feldern sortieren muss. Ich habe versucht, OrderBy in LINQ zu verwenden, aber dadurch kann ich nur ein Feld angeben. Ich suche nach einer Liste, die nach dem ersten Feld sortiert werden soll, und nach Duplikaten im ersten Feld, die nach dem zweiten Feld sortiert werden sollen.
Zum Beispiel möchte ich, dass die Ergebnisse so aussehen (sortiert nach Nachname und Vorname).
- Adams, John
- Smith, James
- Smith, Peter
- Thompson, Fred
Ich habe gesehen, dass Sie die SQL-ähnliche Syntax verwenden können, um dies zu erreichen, aber ich suche nach einer Möglichkeit, dies mit der OrderBy-Methode zu tun.
IList<Person> listOfPeople = /*The list is filled somehow.*/
IEnumerable<Person> sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName, aPerson.FirstName); //This doesn't work.
Wenn Sie die Methodensyntax verwenden möchten, verwenden Sie
ThenBy()
wie von anderen vorgeschlagen:In der Abfragesyntax kann dasselbe so erreicht werden, wie Sie es wollten: zwei Sortierschlüssel, die durch ein Komma getrennt sind:
from person in listOfPeople orderby person.LastName, person.FirstName select person
Der obige Code wird tatsächlich zu Code kompiliert, der
OrderBy()
und verwendetThenBy()
, wie im ersten Beispiel.Wenn Sie möchten,
OrderBy()
dass zwei (oder mehr) Sortierschlüssel benötigt werden, können Sie dies auch als Erweiterungsmethode fürIEnumerable<T>
interne AufrufeOrderBy()
und schreibenThenBy()
.quelle
Ihre nachfolgenden Felder sollten mit der ThenBy () -Methode sortiert werden
quelle
Verwenden
.ThenBy(aPerson=>field2);
quelle
var sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName).ThenBy(a => aPerson.FirstName);
quelle
Die Möglichkeit, eine Liste mit mehr Dateien zu bestellen, ist die folgende:
var soterdList = initialList.OrderBy(x => x.Priority). ThenBy(x => x.ArrivalDate). ThenBy(x => x.ShipDate);
Sie können andere Felder mit der Klasse "ThenBy" hinzufügen.
quelle