Pregunta

Tengo una clase (C #) llamada Hit con un ItemID (int) y una propiedad Score (int). Me salto el resto de los detalles para que sea breve. 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 todos los Hit.Score de cada Hit.ItemID individual, ordenado por puntuación. Así que si tengo los siguientes elementos en la lista original

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?

¿Fue útil?

Solución

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

Otros consejos

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top