首页 / C#开发 / 正文

.NET(C#)使用Linq GroupBy将泛型集合List<T>按某个属性分组后进行Sum等数据统计

23290 1 发布于: 2015-10-09 读完约需5分钟

.NET Framework 3.5中新增了Linq,让我们在操作泛型数据类型时方便快捷了很多,比如Concat,GroupBy,GroupJoin,Select等等。今天这篇文章要给大家分享的是.NET中使用Linq的GroupBy将泛型集合List<T>按某个属性分组并进行Sum的统计操作。例如有如下的泛型集合:

ID       Name   Value
1        N1     5
2        N2     2
3        N3     6
4        N2     15
5        N1     20
6        N6     3
7        N5     8

我们需要使用Linq的GroupBy按Name分组后统计每个Name分组的Value的和,统计结果形如:

Name   Category
N1     25
N2     17
N3     6
N6     3
N5     8

思考一下,不用.NET(C#)的Linq你会怎么来实现这个分组并统计的这个实例场景?以下是使用.NET(C#)的Linq来实现按Name分组并统计的实例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqGroupByDemo
{
  class Program
  {
    static void Main(string[] args)
    {
      var lst = new List<Stat> { 
        new Stat{Id=1,Name="N1",Value=5},
        new Stat{Id=2,Name="N2",Value=2},
        new Stat{Id=3,Name="N3",Value=6},
        new Stat{Id=4,Name="N2",Value=15},
        new Stat{Id=5,Name="N1",Value=20},
        new Stat{Id=6,Name="N6",Value=3},
        new Stat{Id=7,Name="N5",Value=8},
      };
      var g = lst.GroupBy(x => x.Name);
      var results = g.Select(x => new
      {
        Key = x.Key,
        Name = x.First().Name,
        Count = x.Sum(s => s.Value)
      });
      foreach (var item in results)
      {
        Console.WriteLine("Key:{0},Name:{1},Count:{2}", item.Key, item.Name, item.Count);
      }
      Console.ReadKey();
    }

  }
  class Stat
  {
    public int Id { get; set; }
    public string Name { get; set; }
    public int Value { get; set; }
  }
}

运行结果如图:

linq-group-by-demo

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

上一篇: 集DDD,TDD,SOLID,MVVM,DI,EF,Angularjs等等于一身的.NET(C#)开源可扩展电商系统--Virto Commerce

下一篇: 国内开源CMS--玥雅CMS v3.0全新发布[SignalR,MSMQ,Quartz.Net,Angular,支持千万级数据量]

本文永久链接码友网 » .NET(C#)使用Linq GroupBy将泛型集合List<T>按某个属性分组后进行Sum等数据统计

分享扩散:

发表评论

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