2009-05-04 31 views
12

Tôi có một lớp (C#) được gọi là Lần truy cập với một ItemID (int) và thuộc tính Điểm (int). Tôi bỏ qua phần còn lại của các chi tiết để giữ nó ngắn. Bây giờ trong mã của tôi, tôi có một danh sách lớn mà tôi cần phải làm sau đây chọn (vào một danh sách mới): Tôi cần phải có được tổng của tất cả Hit.Score cho mỗi Hit.ItemID cá nhân, theo thứ tự của Điểm. Vì vậy, nếu tôi có các mục sau đây trong danh sách ban đầuTruy vấn LINQ với SUM và ORDER BY

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

danh sách kết quả nên chứa những điều sau đây:

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

Ai có thể giúp?

Trả lời

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