2009-04-16 22 views
39

Mam następujące kwerendy linq, który działa dobrze. Nie jestem pewien, jak mogę zamówić wynik grupy.Jak mogę zamówić wynik grupy, w 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) } 

wyniki są obecnie sortowane przez UserId rosnąco. Jestem po zdobyciu punktów.

dzięki :)

Odpowiedz

64

Wystarczy dodać klauzulę 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

Próbowałem po prostu dodać zamówienie, ale nie zadziałało. Ale dodałeś tam instrukcję LET! Ahhh ... to ciekawe ... –

+0

Nie sprawdziłem, ale nie sądzę, że LET jest konieczne. Czy wystarczy "orderby g.Sum (x => x.Score)"? –

+0

może być, ale potem muszę mieć g.Sum również wymienione w select ... więc to robi sumę, dwa razy? –

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

nadzieję, że będzie rozwiązać problem, łatwiej niż Top One;)

Cheers

+1

+1. Ponad 3 lata po opublikowaniu tej odpowiedzi, pomogło mi to dzisiaj! – utsikko

Powiązane problemy