2009-01-31 20 views
28

verstehe ich eine harte Zeit, wie kann ich eine LINQ-Abfrage bilden die folgenden Funktionen ausführen:C# LINQ Abfrage - Gruppe von

Ich habe eine Tabelle CallLogs und ich möchte wieder ein einzelnes Ergebnis erhalten, die das repräsentiert Anruf, der die längste Dauer hat.

Die Zeile sieht wie folgt aus:

[ID] [RemoteParty] [Dauer]

Es können mehrere Zeilen für die gleiche RemoteParty sein, jeder, der einen Anruf von einer bestimmten Dauer darstellt . Ich möchte wissen, welche RemoteParty die längste Gesamtdauer hat.

LINQ verwenden, habe ich bis hierher:

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

So, jetzt habe ich eine gruppierte Ergebnis mit der Gesamtdauer für jede RemoteParty aber ich brauche die maximale Einzelergebnis.

[DistinctRemoteParty1] [Dauer]

[DistinctRemoteParty2] [Dauer]

[DistinctRemotePartyN] [Dauer]

Wie kann ich die Abfrage ändern, dies zu erreichen?

Antwort

26

Bestellen Sie das Ergebnis und geben Sie das erste zurück.

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

Werfen Sie einen Blick auf die "Max" Extension-Methode von Linq

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

, dass nur die maximale Gesamtdauer ohne RemoteParty Teil zurückkehren würde. – configurator