2017-02-16 10 views
0

私は顧客が送信したすべてのSMSのエントリを含むデータベーステーブルを持っています。それはこのようなものになります。LINQでGroupByを使用する

CustomerId SentBy SentTo SentDate 

を私はかなりないよLINQ(好ましくは流暢な構文)

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

を使用して、顧客ごとの送信されたSMSメッセージの合計額を一覧表示するレポートを作成したいですしかし、どのように結果をループするのか。次の出力が必要です:

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

はそれが役に立てば幸い!