Подтвердить что ты не робот

С# LINQ Query - Group By

Мне сложно понять, как я могу сформировать запрос LINQ, чтобы сделать следующее:

У меня есть таблица CallLogs, и я хочу вернуть единственный результат, который представляет собой вызов, который имеет наибольшую продолжительность.

Строка выглядит так:

[ID] [RemoteParty] [Продолжительность]

Для одной и той же RemoteParty может быть несколько строк, каждая из которых представляет собой вызов определенной продолжительности. Я хочу знать, какая RemoteParty имеет самую длинную общую продолжительность.

Используя LINQ, я получил это далеко:

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

Итак, теперь у меня есть сгруппированный результат с общей продолжительностью для каждого RemoteParty, но мне нужен максимальный единственный результат.

[DistinctRemoteParty1] [Продолжительность]

[DistinctRemoteParty2] [Продолжительность]

[DistinctRemotePartyN] [Продолжительность]

Как я могу изменить запрос для достижения этого?

4b9b3361

Ответ 1

Закажите результат и верните первый.

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

Ответ 2

Посмотрите на метод расширения "Макс" от linq

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