2013-03-29 40 views

Trả lời

14
from t in myTable 
group t by new { 
    t.ID 
} into g 
select new { 
    Average = g.Average(p => p.Score), 
    g.Key.ID 
} 

hoặc Lambda

myTable.GroupBy(t => new {ID = t.ID}) 
    .Select (g => new { 
      Average = g.Average (p => p.Score), 
      ID = g.Key.ID 
     }) 
+0

Cảm ơn bạn. Đúng thứ tôi cần. Công trình tuyệt vời – Yuri

+0

chào mừng bạn. học tập chăm chỉ :) – spajce

0
var _result = from a in myTable 
       group a by a.ID into g 
       select new 
       { 
        ID = g.Key.ID, 
        AverageResult = g.Average(x => x.Score) 
       } 
+1

Lưu ý rằng 'g.Key.ID' sẽ không tồn tại và sẽ không biên dịch. Chỉ cần 'g.Key' trong đoạn mã này. –

+0

@AnthonyPegram tại sao nó sẽ không biên dịch? Tôi vừa thử nghiệm nó. –

+0

Phiên bản này? Bạn sẽ nhận được một thông báo lỗi nói rằng "int" không chứa định nghĩa cho 'ID' và không có phương thức mở rộng 'ID' chấp nhận ... "(Thay thế' int' cho bất kỳ loại thuộc tính thực tế nào cho ID.) điểm là 'g.Key' * là * ID. Nó không phải là một đối tượng có chứa một tài sản ID. –

1

Tương đương trong LINQ-to-Objects sẽ giống như dưới đây.

var results = from row in myTable 
       group row by row.Id into rows 
       select new 
       { 
        Id = rows.Key, 
        AverageScore = rows.Average(row => row.Score) 
       }; 

Nó chỉ hơi khác đối với ORM như khuôn khổ thực thể. Cụ thể, bạn sẽ cần phải đi qua bối cảnh dữ liệu hoặc một DbSet/ObjectSet thích hợp.

Các vấn đề liên quan