2009-01-31 29 views
28

estoy teniendo dificultades para comprender cómo puedo formar una consulta LINQ para hacer lo siguiente:C# LINQ consultas - Agrupar por

Tengo una tabla CallLogs y quiero volver a un único resultado que representa la llamada que tiene la duración más larga.

La fila se ve así:

[ID] [RemoteParty] [Duración]

Puede haber múltiples filas para el mismo RemoteParty, cada uno de los cuales representa una llamada de una duración determinada . Estoy queriendo saber qué RemoteParty tiene la duración total más larga.

mediante LINQ, llegué hasta aquí:

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

Así que ahora tengo un resultado agrupado con la duración total de cada RemoteParty pero necesito el máximo resultado único.

[DistinctRemoteParty1] [Duración]

[DistinctRemoteParty2] [Duración]

[DistinctRemotePartyN] [Duración]

¿Cómo puedo modificar la consulta para lograr esto?

Respuesta

26

Ordene el resultado y devuelva el primero.

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

Tenga una mirada en el método de extensión "Max" de linq

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

que sólo devolver el máximo TotalDuration sin la parte RemoteParty. – configurator