2009-05-04 12 views
12

Tengo una clase (C#) llamada Hit con un ItemID (int) y una propiedad Score (int). Me salteo el resto de los detalles para mantenerlo corto. Ahora en mi código, tengo una enorme lista en la que debo hacer la siguiente selección (en una nueva lista): necesito obtener la suma de todas las puntuaciones de hit para cada Hit.ItemID individual, ordenada por puntaje. Así que si tengo los siguientes elementos en la lista originalConsulta de Linq con SUM y ORDEN POR

ItemID=3, Score=5 
ItemID=1, Score=5 
ItemID=2, Score=5 
ItemID=3, Score=1 
ItemID=1, Score=8 
ItemID=2, Score=10 

la lista resultante debe contener lo siguiente:

ItemID=2, Score=15 
ItemID=1, Score=13 
ItemID=3, Score=6 

Puede alguien ayudar?

Respuesta

12
var q = (from h in hits 
    group h by new { h.ItemID } into hh 
    select new { 
     hh.Key.ItemID, 
     Score = hh.Sum(s => s.Score) 
    }).OrderByDescending(i => i.Score); 
3
IEnumerable<Hit> result = hits. 
    GroupBy(hit => hit.ItemID). 
    Select(group => new Hit 
        { 
         ItemID = group.Key, 
         Score = group.Sum(hit => hit.Score) 
        }). 
    OrderByDescending(hit => hit.Score);