2009-02-10 5 views
21

J'ai une collection générique de type MyImageClass, et MyImageClass a une propriété booléenne "IsProfile". Je veux trier cette liste générique dont IsProfile == true se trouve au début de la liste.Comment trier la liste générique Asc ou Desc?

J'ai essayé ceci.

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

avec le code ci-dessus l'image se trouve au dernier où la propriété IsProfile est vrai. Mais je veux que ce soit au premier index. J'ai besoin de quelque chose Asc ou Desc. Ensuite, j'ai fait ça.

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

Y at-il un moyen plus facile de le faire?

Merci

Répondre

39

Que diriez-vous:

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

Cela commander les images dans l'ordre décroissant par la propriété IsProfile puis créer une nouvelle liste à partir du résultat.

+0

=> au lieu de -> –

+0

Fixé cela pour Ray. –

+1

Merci pour la réponse et désolé pour mon inutile, je ne sais pas pourquoi je n'ai pas attention le mot sous OrderBy sur l'intellisense. Merci encore –

33

Vous pouvez utiliser .OrderByDescending (...) - mais notez qu'avec les méthodes LINQ, vous créez une nouvelle liste ordonnée, sans commander la liste existante.

Si vous avez un List<T> et que vous voulez réordonner la liste existante, vous pouvez utiliser Sort() - et vous pouvez le rendre plus facile en ajoutant quelques méthodes d'extension:

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

Ensuite, vous pouvez utiliser list.Sort(x=>x.SomeProperty) et list.SortDescending(x=>x.SomeProperty).

+0

Merci Marc, donc si j'utilise Linq pour commander, cela signifie-t-il que cela cause une perte de performance? –

+0

Eh bien, d'une toute petite manière, mais comparé à la liaison de données, vous ne le remarquerez jamais. –

+0

Merci beaucoup –