2009-01-31 97 views
28

Tôi đang gặp khó khăn trong việc hiểu cách tôi có thể tạo một truy vấn LINQ để thực hiện như sau:C# LINQ Truy vấn - Nhóm theo

Tôi có một bảng CallLogs và tôi muốn lấy lại một kết quả đại diện cho cuộc gọi có thời lượng dài nhất.

Hàng trông như thế này:

[ID] [RemoteParty] [Thời gian]

Có thể có nhiều hàng cho RemoteParty ngang nhau, mỗi đại diện cho một cuộc gọi của một thời gian đặc biệt . Tôi muốn biết RemoteParty nào có tổng thời lượng dài nhất.

Sử dụng LINQ, tôi nhận được điều này cho đến nay:

var callStats = (from c in database.CallLogs 
       group c by c.RemoteParty into d 
       select new 
       { 
         RemoteParty = d.Key, 
         TotalDuration = d.Sum(x => x.Duration) 
       }); 

Vì vậy, bây giờ tôi có một kết quả nhóm với tổng thời gian cho mỗi RemoteParty nhưng tôi cần những kết quả duy nhất tối đa.

[DistinctRemoteParty1] [Thời gian]

[DistinctRemoteParty2] [Thời gian]

[DistinctRemotePartyN] [Thời gian]

Làm thế nào tôi có thể sửa đổi các truy vấn để đạt được điều này?

Trả lời

26

Đặt hàng kết quả và trả lại kết quả đầu tiên.

var callStats = (from c in database.CallLogs 
       group c by c.RemoteParty into d 
       select new 
       { 
         RemoteParty = d.Key, 
         TotalDuration = d.Sum(x => x.Duration) 
       }); 

callStats = callStats.OrderByDescending(a => a.TotalDuration) 
        .FirstOrDefault(); 
4

Có xem xét phương pháp mở rộng "Max" từ LINQ

callStats.Max(g=>g.TotalDuration); 
+0

Điều đó sẽ chỉ trả lại TotalDuration tối đa mà không cần phần RemoteParty. – configurator

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