2009-04-16 8 views
39

J'ai la requête linq suivante, qui fonctionne bien. Je ne sais pas comment je commande le résultat du groupe.Comment puis-je commander un résultat de groupe, dans Linq?

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 triés par UserId en ordre croissant. Je suis après Score descendant.

merci :)

Répondre

64

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

J'ai essayé juste d'ajouter un orderby mais cela n'a pas fonctionné. Mais ce que vous avez fait était d'ajouter une déclaration LET là-dedans! Ahhh .. c'est intéressant ... –

+0

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

+0

pourrait être, mais alors je dois avoir le g.Sum également répertorié dans le select ... alors est-ce que faire la somme, deux fois? –

13
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); 

Espérons que cela résoudre votre problème, plus facile que celle du haut;)

Vive

+1

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

Questions connexes