96 votes

Trier une liste en C# avec LINQ

Je veux trier une liste en C#.

Par exemple, lorsque la structure de propriété de l'AVC devient vraie, il faut les montrer en premier, puis l'AVC devient fausse. Y a-t-il un moyen de faire cela en C# LINQ ?

177voto

Jon Skeet Points 692016

Eh bien, la façon la plus simple d'utiliser LINQ serait quelque chose comme ceci :

list = list.OrderBy(x => x.AVC ? 0 : 1)
           .ToList();

ou

list = list.OrderByDescending(x => x.AVC)
           .ToList();

I croire que l'ordre naturel de bool Les valeurs sont false < true mais la première forme est plus claire, car tout le monde sait que 0 < 1 .

Notez que cela ne triera pas la liste d'origine elle-même - cela créera une nouvelle liste, et assignera la référence à l'objet de la liste. list variable. Si vous souhaitez effectuer un tri sur place, vous devez utiliser la fonction List<T>.Sort méthode.

20voto

Ani Points 59747

Comme ça ?

Dans LINQ :

var sortedList = originalList.OrderBy(foo => !foo.AVC)
                             .ToList();

Ou en place :

originalList.Sort((foo1, foo2) => foo2.AVC.CompareTo(foo1.AVC));

Comme le dit Jon Skeet, le truc ici est de savoir que false est considéré comme "plus petit" que true.

Si vous constatez que vous effectuez ces opérations d'ordonnancement à de nombreux endroits différents dans votre code, il serait bon d'obtenir votre type Foo pour mettre en œuvre le IComparable<Foo> et IComparable interfaces.

17voto

Guffa Points 308133

Je suppose que vous voulez qu'ils soient triés selon un autre critère, afin d'obtenir un ordre cohérent entre tous les éléments où l'AVC est le même. Par exemple par nom :

var sortedList = list.OrderBy(x => c.AVC).ThenBy(x => x.Name).ToList();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X