2009-04-16 13 views
39

Tengo la siguiente consulta linq, que funciona bien. No estoy seguro de cómo ordeno el resultado del grupo.¿Cómo ordeno un resultado de grupo en 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) } 

los resultados están actualmente ordenados por UserId ascendente. Estoy después de que el puntaje desciende.

gracias :)

Respuesta

64

Sólo tiene que añadir la cláusula 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

Intenté simplemente agregar un pedido pero no funcionó. ¡Pero lo que hicieron fue agregar una declaración LET allí! Ahhh ... eso es interesante ... –

+0

No revisé, pero no creo que el LET sea necesario. ¿Será suficiente "orderby g.Sum (x => x.Score)"? –

+0

podría ser, pero luego tengo que tener el g.Sum también aparece en la selección ... ¿así que está haciendo la suma, dos veces? –

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

Esperanza Esto solucionará su problema, más fácil que la parte superior uno;)

Saludos

+1

+1. ¡Más de 3 años después de que se haya publicado esta respuesta, me ayudó hoy! – utsikko