40 votes

Comment ordonner les résultats d'un groupe en Linq ?

J'ai la requête linq suivante, qui fonctionne bien. Je ne suis pas sûr de savoir comment ordonner les résultats groupés.

from a in Audits
join u in Users on a.UserId equals u.UserId
group a by a.UserId into g
select new { UserId = g.Key, Score = g.Sum(x => x.Score) }

les résultats sont actuellement classés par UserId en ordre croissant. Je souhaite que les résultats soient classés par Score en ordre décroissant.

merci :)

65voto

Arjan Einbu Points 7941

Il suffit d'ajouter la clause orderby ;-)

from a in Audits
join u in Users on a.UserId equals u.UserId
group a by a.UserId into g
let score = g.Sum(x => x.Score)
orderby score descending
select new { UserId = g.Key, Score = score };

0 votes

J'ai essayé d'ajouter un orderby mais cela n'a pas fonctionné. Mais ce que vous avez fait, c'est ajouter une instruction LET ! Ahhh... c'est intéressant...

0 votes

Je n'ai pas vérifié, mais je ne pense pas que la LET soit nécessaire. Est-ce que "orderby g.Sum(x => x.Score)" suffira ?

0 votes

C'est possible, mais il faut alors que le g.Sum soit également listé dans la sélection... cela revient-il à faire la somme deux fois ?

13voto

Prashant Points 4362
var results =
 (from a in Audits
join u in Users on a.UserId equals u.UserId
group a by a.UserId into g
select new { UserId = g.Key, Score = g.Sum(x => x.Score) })
.OrderByDescending(p=>p.Score);

J'espère que cela résoudra votre problème, c'est plus facile que la première solution ;)

Santé

1 votes

+1. Plus de 3 ans après que cette réponse ait été postée, elle m'a aidé aujourd'hui !

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