web-dev-qa-db-fra.com

Comment trier la liste générique ASC ou DESC?

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 que IsProfile == True signifie au début de la liste.

J'ai essayé cela.

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

avec le code ci-dessus, l'image se tient au dernier, quelle propriété IsProfile est vraie. Mais je veux que ce soit au premier indice. J'ai besoin de quelque chose ASC ou DESC. Alors j'ai fait ça.

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

Y a-t-il un moyen plus facile de le faire?

Merci

21
Barbaros Alp

Que diriez-vous:

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

Cela commandera les images en ordre décroissant par la propriété IsProfile, puis créer une nouvelle liste à partir du résultat.

39
Ray Booysen

Vous pouvez utiliser .orderbydescending (...) - mais noter qu'avec les méthodes LINQ, vous créez une nouvelle liste commandée, ce n'est pas de commander la liste existante.

Si vous avez un List<T> Et souhaitez ré-commander la liste existante, vous pouvez utiliser Sort() - et vous pouvez faciliter la tâche en ajoutant quelques extensions. Méthodes:

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).

33
Marc Gravell