2017-02-16 10 views
0

У меня есть таблица базы данных, содержащая записи для каждого отправляемого SMS-клиента. Это выглядит примерно так:Использование GroupBy в LINQ

CustomerId SentBy SentTo SentDate 

Я хочу, чтобы создать отчет, содержащий общее количество отправленных SMS-сообщений на одного клиента, с помощью LINQ (желательно свободно синтаксис)

var smses = smsTable.GroupBy(x => x.CustomerId); 

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

CustomerId SmsCount 
---------------------- 
1234  1756 
100   333 

Буду признателен за любую помощь!

ответ

2

Согласно MSDN, то GroupBy возвращает IEnumerable<IGrouping<TKey, TElement>> и каждый IGrouping объект содержит коллекцию объектов типа TElement и ключ.

Это значит, что суммарный объект будет равен Key и каждому Ключевому обозначению будут связаны коллекции. В вашем случае вам нужно получить ключ, а также количество элементов в каждой группе. для этого может использоваться следующий код.

var smses = smsTable.GroupBy(x => x.CustomerId) 
        .Select(y => new 
           { 
            CustomerId = y.Key, 
            smsCount = y.Count() 
           }); 
+1

Спасибо, работал как шарм! :) – msk

1

Попробуйте сделать это:

var smses = smsTable.GroupBy(x => x.CustomerId).Select(group => 
         new 
         { 
          CustomerId = group.Key, 
          SmsCount = group.Count() 
         }); 

Надеется, что это помогает!