Запрос группировки и прогнозирования Linq

#linq #linq-to-entities

#linq #linq-to-entities

Вопрос:

У меня есть класс EF «Call», в котором есть дата, номер телефона, имя вызывающего абонента и стоимость вызова.

Моя цель — сгруппировать вызовы по номеру телефона, просуммировать общую стоимость и получить результаты 40 самых дорогих вызовов. У меня все это работает, но у меня возникли проблемы с проекцией, как мне получить доступ к имени вызывающего абонента?

 var query =
(

from call in model.Calls
group call by call.TelephoneNumber into g
orderby g.Sum(gr => gr.ActualCost) descending

select new

{
TelephoneNumber = g.Key,
CallerName = ???
Cost = (g.Sum(gr => gr.ActualCost)),
TotalNumbers = g.Count(),
}

).Take(40);
 

Ответ №1:

Вам также нужна группа для имени вызывающего абонента:

 var query =
  (from call in model.Calls
  group call by new { call.TelephoneNumber, call.CallerName }  into g
  orderby g.Sum(gr => gr.ActualCost) descending
  select new
  {
    TelephoneNumber = g.Key.TelephoneNumber,
    CallerName = g.Key.CallerName,
    Cost = (g.Sum(gr => gr.ActualCost)),
    TotalNumbers = g.Count(),
  }).Take(40);
 

Комментарии:

1. Большое спасибо за помощь! Так просто!