2009-02-10 20 views
21

Tengo una colección genérica de tipo MyImageClass, y MyImageClass tiene una propiedad booleana "IsProfile". Quiero ordenar esta lista genérica que IsProfile == true se encuentra al comienzo de la lista.¿Cómo ordenar la lista genérica Asc o Desc?

He intentado esto.

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

con el código que aparece arriba de la imagen cuya propiedad IsProfile es verdadera. Pero quiero que esté en el primer índice. Necesito algo Asc o Desc. Entonces hice esto.

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

¿Hay alguna manera más fácil de hacer esto?

Gracias

Respuesta

39

¿Qué tal:

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

Esto ordenar las imágenes por orden decreciente de la Propiedad IsProfile y luego crear una nueva lista del resultado.

+0

=> en lugar de -> –

+0

Corregido eso para Ray. –

+1

Gracias por la respuesta y disculpe por mi innecesario, no sé por qué no tomé la atención en WordBy en intellisense. Gracias de nuevo –

33

Puede usar .OrderByDescending (...) pero tenga en cuenta que con los métodos LINQ está creando una nueva lista ordenada, no ordenando la lista existente.

Si usted tiene un List<T> y desea volver a ordenar la lista existente, entonces se puede utilizar Sort() - y usted puede hacer que sea más fácil mediante la adición de unos pocos métodos de extensión:

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

A continuación, puede use list.Sort(x=>x.SomeProperty) y list.SortDescending(x=>x.SomeProperty).

+0

Gracias Marc, entonces si uso Linq para ordenar, ¿significa que causa una pérdida de rendimiento? –

+0

Bueno, de una manera muy pequeña, pero en comparación con el enlace de datos nunca lo notarás. –

+0

Muchas gracias –

Cuestiones relacionadas