2009-04-16 5 views
39

У меня есть следующий запрос linq, который отлично работает. Я не уверен, как я заказываю результат группы.Как заказать результат группы в 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) } 

Результаты в настоящее время заказы от UserId по возрастанию. Я поменяю счет.

спасибо :)

ответ

64

Просто добавьте пункт 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

Я попробовал просто добавить orderby, но это не сработало. Но то, что вы сделали, это добавить предложение LET! Ahhh .. это интересно ... –

+0

Я не проверял, но я не думаю, что LET необходимо. Будет ли просто «orderby g.Sum (x => x.Score)» достаточно? –

+0

может быть, но тогда я должен иметь g.Sum, также перечисленный в select ... так это то, что делает сумму, дважды? –

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

Надеется, что это будет исправить вашу проблему, легче, чем верхняя;)

Приветствия

+1

+1. Более трех лет после того, как этот ответ был опубликован, это помогло мне сегодня! – utsikko