2009-02-10 16 views
21

Ich habe eine generische Auflistung vom Typ MyImageClass, und MyImageClass hat eine boolesche Eigenschaft "IsProfile". Ich möchte diese generische Liste sortieren, wobei IsProfile == true am Anfang der Liste steht.Wie generische Liste Asc oder Desc sortieren?

Ich habe das versucht.

rptBigImages.DataSource = estate.Images.OrderBy(est=>est.IsProfile).ToList(); 

mit dem Code über dem Bild steht an der letzten, die IsProfile Eigenschaft ist wahr. Aber ich möchte es auf dem ersten Index sein. Ich brauche etwas Asc oder Desc. Dann habe ich das getan.

rptBigImages.DataSource = estate.Images.OrderBy(est=>est.IsProfile).Reverse.ToList(); 

Gibt es einen einfacheren Weg, dies zu tun?

Dank

Antwort

39

Wie wäre:

estate.Images.OrderByDescending(est => est.IsProfile).ToList() 

Dadurch werden die Bilder in absteigender Reihenfolge nach der IsProfile Property bestellen und dann eine neue Liste aus dem Ergebnis erstellen.

+0

=> anstelle von -> –

+0

Das für Ray behoben. –

+1

Danke für die Antwort und Entschuldigung für meine unnötige, ich weiß nicht, warum ich nicht beachtet habe das Wort unter OrderBy auf dem Intellisense. Danke nochmal –

33

Sie können .OrderByDescending (...) verwenden. Beachten Sie jedoch, dass Sie mit den LINQ-Methoden eine neue geordnete Liste erstellen und die vorhandene Liste nicht sortieren.

Wenn Sie eine List<T> und wollen erneut um die bestehende Liste, dann können Sie Sort() verwenden - und Sie können es einfacher machen, indem sie ein paar Erweiterungsmethoden hinzufügen:

static void Sort<TSource, TValue>(this List<TSource> source, 
     Func<TSource, TValue> selector) { 
    var comparer = Comparer<TValue>.Default; 
    source.Sort((x,y)=>comparer.Compare(selector(x),selector(y))); 
} 
static void SortDescending<TSource, TValue>(this List<TSource> source, 
     Func<TSource, TValue> selector) { 
    var comparer = Comparer<TValue>.Default; 
    source.Sort((x,y)=>comparer.Compare(selector(y),selector(x))); 
} 

Dann können Sie Verwenden Sie list.Sort(x=>x.SomeProperty) und list.SortDescending(x=>x.SomeProperty).

+0

Danke Marc, wenn ich also Linq zum Bestellen verwende, bedeutet das, dass es einen Leistungsverlust verursacht? –

+0

Nun, auf eine sehr kleine Art und Weise, aber verglichen mit der Datenbindung werden Sie es nie bemerken. –

+0

Vielen Dank –

Verwandte Themen