76 votes

LINQ OrderBy avec plusieurs champs

J'ai une liste que j'ai besoin de trier par deux champs. J'ai essayé d'utiliser OrderBy dans LINQ, mais qui ne me permet de spécifier un champ. Je suis à la recherche de la liste à trier par le premier champ, puis s'il y a des doublons dans le premier champ à trier par le deuxième champ.

Par exemple je veux les résultats de ressembler à ceci (triés par nom, puis du prénom).

  • Adams, John
  • Smith, James
  • Smith, Peter
  • Thompson, Fred

J'ai vu que vous pouvez utiliser le SQL comme syntaxe pour accomplir cela, mais je suis à la recherche d'un moyen de le faire avec la méthode OrderBy.

IList<Person> listOfPeople = /*The list is filled somehow.*/
IEnumerable<Person> sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName, aPerson.FirstName); //This doesn't work.

156voto

tzaman Points 13190

Vous devez utiliser ThenBy :

 listOfPeople.OrderBy(person => person.LastName)
            .ThenBy(person => person.FirstName)
 

23voto

svick Points 81772

Si vous souhaitez utiliser la syntaxe de méthode, utilisez ThenBy(), comme d'autres, a suggéré:

listOfPeople.OrderBy(person => person.LastName)
            .ThenBy(person => person.FirstName)

Dans la syntaxe de la requête, la même chose peut être accomplie de la manière que tu voulais: deux clés de tri séparées par une virgule:

from person in listOfPeople
orderby person.LastName, person.FirstName
select person

Le code ci-dessus sera effectivement compilé en code qui utilise OrderBy() et ThenBy(), comme dans le premier exemple.

Aussi, si vous voulez l' OrderBy() qui prend deux (ou plus) des clés de tri, vous pouvez certainement écrire que comme une méthode d'extension sur IEnumerable<T> qui appelle en interne OrderBy() et ThenBy().

2voto

Ben Robinson Points 14558

Vos champs suivants doivent être classés à l'aide de la méthode ThenBy ()

1voto

Robaticus Points 14665

Utilisez .ThenBy(aPerson=>field2);

1voto

moi_meme Points 3966
var sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName).ThenBy(a => aPerson.FirstName);

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