2012-11-07 19 views
5

Ich habe eine Klasse namens Person, die eine Eigenschaft LastName enthält, die eine Zeichenfolge widerspiegelt, die dem Nachnamen der Person entspricht.Sortieren einer Liste von benutzerdefinierten Objekten

habe ich eine Liste wie folgt:

var People = List<Person> 

Was ich irgendwie tun möchte, ist die Menschen durch ihre Eigenschaft Name in alphabetischer Reihenfolge.

Nachdem bei einigen Beispielen suchen, habe ich versucht,

People = People.OrderBy(p => p.LastName); 

Aber es funktioniert nicht.

+1

durch die Art und Weise zu konvertieren, geben Sie immer das, was von Ihnen bedeutet 'Werk' nicht. Ist es ein Kompilierungsfehler? oder ein Laufzeitfehler? oder unerwartete Ergebnisse? usw. –

+2

Dies muss ein Duplikat sein. – Mathias

+0

Mögliches Duplikat: [Benutzerdefinierte Sortierung der Liste ] (http://stackoverflow.com/q/10049466/299327) –

Antwort

13

LINQ verwenden, würden Sie die Ergebnisse zurück in eine List<Person> konvertieren müssen:

People = People.OrderBy(p => p.LastName).ToList(); 

Seit OrderBy gibt ein IOrderedEnumerable<T>, benötigen Sie den zusätzlichen Anruf ToList() diese in eine Liste zurück zu drehen.

Aber da man effektiv eine direkte Art möchten, können Sie auch List<T>.Sort direkt verwenden:

People.Sort((p1, p2) => p1.LastName.CompareTo(p2.LastName)); 
2

Die einfachste ToList(): unter Verwendung

People = People.OrderBy(p => p.LastName).ToList(); 

Sie müssen die ToList einen neuen erstellen bestellt List<Person>

Eine weitere Option zum Sortieren der ursprünglichen Liste ist List.Sort :

People.Sort((p1,p2) => p1.LastName.CompareTo(p2.LastName)); 
0

Sie müssen das Ergebnis der orderby zu .Tolist() wie unter

var people = People.OrderBy(p => p.LastName).ToList(); 
Verwandte Themen