2009-05-04 2 views
12

저는 ItemID (int) 및 Score (int) 속성을 사용하여 Hit (C#) 클래스를 사용합니다. 짧게 유지하기 위해 나머지 세부 사항은 건너 뜁니다. 이제 내 코드에서 다음 목록을 선택해야하는 커다란 목록이 있습니다 (새 목록으로) : 모든 히트의 합계를 구해야합니다. 각 히트마다 점수가옵니다 .ItemID, 점수순으로 정렬됩니다.SUM 및 ORDER BY를 사용한 Linq 쿼리

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

누군가가 도와 드릴까요 : 나는 원래 목록에 다음 항목이있는 경우 그래서

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

은 결과 목록은 다음 포함해야합니까?

답변

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