在LINQ

时间:2017-02-16 10:58:14

标签: c# linq .net-core

我有一个数据库表,其中包含每个SMS客户发送的条目。它看起来像这样:

CustomerId  SentBy  SentTo SentDate

我想创建一个报告,列出每个客户发送的SMS消息总量,使用LINQ(最好是流利的语法)

var smses = smsTable.GroupBy(x => x.CustomerId);
但是,我不太确定如何循环结果。我想要以下输出:

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

我很感激任何帮助!

2 个答案:

答案 0 :(得分:2)

  

根据MSDN,GroupBy返回IEnumerable<IGrouping<TKey, TElement>>,每个IGrouping对象包含一个   TElement类型和密钥对象的集合。

这意味着您可以获得分组项的值将等于Key,并且每个Key将与集合相关联。在您的情况下,您必须获得每个组中的密钥和项目计数。为此,可以使用以下代码。

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

答案 1 :(得分:1)

尝试这样做:

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

希望它有所帮助!