178 votes

Comment utiliser orderby avec 2 champs dans linq ?

Disons que j'ai ces valeurs dans une table de base de données

id = 1
StartDate = 1/3/2010
EndDate =  1/3/2010

id = 2
StartDate = 1/3/2010
EndDate = 1/9/2010

Maintenant, j'ai jusqu'à présent cette commande de pour mon linq

var hold = MyList.OrderBy(x => x.StartDate).ToList();

Je veux le commander cependant aussi en utilisant la date de fin.

Comme l'ordre dans lequel je voudrais que ce soit

id 2
id 1

Donc endDates qui sont plus grands passent en premier. Je ne sais pas si j'ai besoin de changer cela pour utiliser une fonction de comparaison ou quelque chose.

333voto

mquander Points 32650
MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate);

17voto

daniele3004 Points 62

Si vous avez deux champs ou plus à commander, essayez ceci :

var soterdList = initialList.OrderBy(x => x.Priority).
                                    ThenBy(x => x.ArrivalDate).
                                    ThenBy(x => x.ShipDate);

Vous pouvez ajouter d'autres champs avec clasole "ThenBy"

13voto

Hugo Passos Points 121
MyList.OrderBy(x => x.StartDate).ThenByDescending(x => x.EndDate);

Notez que vous pouvez également utiliser le mot-clé Descendant dans OrderBy (au cas où vous en auriez besoin). Une autre réponse possible est donc :

MyList.OrderByDescending(x => x.StartDate).ThenByDescending(x => x.EndDate);

6voto

Abdul Saboor Points 775

VB.NET

 MyList.OrderBy(Function(f) f.StartDate).ThenByDescending(Function(f) f.EndDate)

OU

  From l In MyList Order By l.StartDate Ascending, l.EndDate Descending

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