2009-02-10 10 views
21

Ho una raccolta generica di tipo MyImageClass e MyImageClass ha una proprietà booleana "IsProfile". Voglio ordinare questo elenco generico che IsProfile == true si trova all'inizio della lista.Come ordinare l'elenco generico Asc o Desc?

Ho provato questo.

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

con il codice sopra l'immagine si trova all'ultimo che la proprietà IsProfile è true. Ma voglio che sia al primo indice. Ho bisogno di qualcosa Asc o Desc. Allora l'ho fatto.

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

C'è un modo più semplice per farlo?

Grazie

risposta

39

ne dite:

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

Ciò ordinare le immagini in ordine decrescente dal IsProfile proprietà e quindi creare un nuovo elenco dal risultato.

+0

=> anziché -> –

+0

Risolto quello per Ray. –

+1

Grazie per la risposta e scusa per il mio non necessario, non so perché non ho preso in considerazione la parola sotto OrderBy sull'intelligenza. Grazie ancora –

33

È possibile utilizzare .OrderByDescending (...) - ma si noti che con i metodi LINQ si sta creando un nuovo elenco ordinato, non ordinando l'elenco esistente.

Se si dispone di un List<T> e vuole ri-ordinare la lista esistente, quindi è possibile utilizzare Sort() - e si può rendere più facile con l'aggiunta di un paio di metodi di estensione:

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))); 
} 

Poi si può utilizzare list.Sort(x=>x.SomeProperty) e list.SortDescending(x=>x.SomeProperty).

+0

Grazie Marc, quindi se uso Linq per ordinare, vuol dire che causa una perdita di prestazioni? –

+0

Beh, in un modo molto piccolo, ma rispetto al data-binding non lo noterai mai. –

+0

Grazie mille –

Problemi correlati