首页 / .NET / 正文

[Linq].NET/C#程序开发中如何使用Linq对集合List<T>进行分组(GroupBy)和统计(Count)?

10208 发布于: 2018-02-06 读完约需5分钟

问题描述

当前有一个实体类UserInfo.cs,包含的属性可能如下:

name, metric, day, other_metric

UserInfo集合List<UserInfo>包含的数据如下:

joe  1 01/01/2011 5
jane 0 01/02/2011 9
john 2 01/03/2011 0
jim  3 01/04/2011 1
jean 1 01/05/2011 3
jill 2 01/06/2011 5
jeb  0 01/07/2011 3
jenn 0 01/08/2011 7

现在,需要使用LinqUserInfometric属性进行分组,并统计每个分组的总数,比如以上示例数据分组统计的结果为:

metric count
0 3
1 2
2 2
3 1

现在试着使用Linq查询表达式来实现以上的需求,Linq查询表达式如下:

 var pl = from r in info
                 orderby r.metric
                 group r by r.metric into grp
                 select new { key = grp.Key, cnt = grp.Count()};

但查询结果不正确,并不是期望的分组统计结果。
那么,[Linq].NET/C#程序开发中如何使用Linq对集合List<T>进行分组(GroupBy)和统计(Count)?

方案一

var result = data.GroupBy(info => info.metric)
                        .Select(group => new {
                             Metric = group.Key,
                             Count = group.Count()
                        })
                        .OrderBy(x => x.Metric)
foreach(var line in result)
{
     Console.WriteLine("{0} {1}", line.Metric, line.Count);
}

执行GroupBy后的分组集合为如下所示:

  (Group 1): [joe  1 01/01/2011 5, jean 1 01/05/2011 3]
  (Group 0): [jane 0 01/02/2011 9, jeb  0 01/07/2011 3, jenn 0 01/08/2011 7]
  (Group 2): [john 2 01/03/2011 0, jill 2 01/06/2011 5]
  (Group 3): [jim  3 01/04/2011 1]

方案二

使用LinqLambda查询表达式,如:

var groups = userInfoList
            .GroupBy(n => n.metric)
            .Select(n => new
            {
                MetricName = n.Key,
                MetricCount = n.Count()
            }
            )
            .OrderBy(n => n.MetricName);

或者:

userInfos.GroupBy(userInfo => userInfo.metric)
        .OrderBy(group => group.Key)
        .Select(group => Tuple.Create(group.key, group.Count()));

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [Linq].NET/C#程序开发中使用Linq如何将相同类型的多个List<T>集合合并成一个集合?

下一篇: 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)

本文永久链接码友网 » [Linq].NET/C#程序开发中如何使用Linq对集合List<T>进行分组(GroupBy)和统计(Count)?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册