28 Stimmen

C# LINQ-Abfrage - Gruppieren nach

Ich habe eine harte Zeit zu verstehen, wie ich eine LINQ-Abfrage bilden kann, um das folgende zu tun:

Ich habe eine Tabelle CallLogs und möchte ein einziges Ergebnis zurückbekommen, das den Anruf mit der längsten Dauer darstellt.

Die Zeile sieht wie folgt aus:

[ID] [RemoteParty] [Dauer]

Es kann mehrere Zeilen für dieselbe RemoteParty geben, von denen jede einen Anruf mit einer bestimmten Dauer darstellt. Ich möchte wissen, welche RemoteParty die längste Gesamtdauer hat.

Mit LINQ bin ich so weit gekommen:

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

Jetzt habe ich also ein gruppiertes Ergebnis mit der Gesamtdauer für jede RemoteParty, aber ich brauche das maximale Einzelergebnis.

[DistinctRemoteParty1] [Dauer]

[DistinctRemoteParty2] [Dauer]

[DistinctRemotePartyN] [Dauer]

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

26voto

tvanfosson Punkte 506878

Ordnen Sie das Ergebnis und geben Sie das erste Ergebnis 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();

4voto

flq Punkte 21455

Schauen Sie sich die Erweiterungsmethode "Max" von linq an

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

0 Stimmen

Das würde nur die maximale Gesamtdauer ohne den RemoteParty-Teil zurückgeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X