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?

Foi útil?

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
scroll top