Linq consulta com SUM e ORDER BY
-
03-07-2019 - |
Pergunta
Eu tenho um (C #) classe chamada Hit com um ItemID (int) e um Score (int) propriedade. Eu ignorar o resto dos detalhes para mantê-lo curto. Agora no meu código, eu tenho uma lista enorme em que eu preciso fazer o seguinte select (em uma nova lista): eu preciso para obter a soma de todas Hit.Score de para cada Hit.ItemID indivíduo, ordenados por Pontuação. Então, se eu tenho os seguintes itens na 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
A lista resultante deve conter o seguinte:
ItemID=2, Score=15
ItemID=1, Score=13
ItemID=3, Score=6
Alguém pode ajudar?
Solução
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);
Outras dicas
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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow