Linq 中按照多个值进行分组(GroupBy) 后进行求和

static void Main(string[] args)
        {
            List<User> products = new List<User>()
           {
                new User(){ Id="1", Name="n1",count1=1},
                new User(){ Id="1", Name="n1",count1=2},
                new User(){ Id="2", Name="n2",count1=3},
                new User(){ Id="2", Name="n2",count1=4},
           };

            var group = products.GroupBy(x => new { x.Id, x.Name })
                .Select(g => new
                {
                    Id = g.Key.Id,
                    Name = g.Key.Name,
                    count1 = g.Sum(t => t.count1)
                }).ToList();
 

            Func<User, dynamic> exp = x => new { x.Id, x.Name };


           var group1 = products.GroupBy(exp)
                     .Select(g => new
                     {
                         Id = g.Key.Id,
                         Name = g.Key.Name,
                         count1 = g.Sum(t => t.count1)
                     }).ToList();

            Func<User, GroupUser> func = x => new GroupUser { Id = x.Id, Name = x.Name };
            var group2 = products.GroupBy(func)
                     .Select(g => new
                     {
                         Id = g.Key.Id,
                         Name = g.Key.Name,
                         count1 = g.Sum(t => t.count1)
                     }).ToList();
 
        }
  
    public class User
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public int count1 { get; set; }

    }

    public class GroupUser
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }

//分组后进行排序返回第一个
List<QualityPerformanceData> maxGroup = qualityPerformanceDataList
                    .DistinctBy(d => new { d.AnalysisItemCode, d.Lower, d.Upper })
                    .OrderBy(x => x.AnalysisItemName)
                    .GroupBy(x => x.AnalysisItemCode)
                    .Select(group => group.OrderByDescending(item => item.Lower).First())
                    .ToList();

输出:


            foreach (var item in tt)
            {
                MessageBox.Show(item.Id + "---" + item.Name + "---" + item.count1);
            }

  

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值