EF GroupBy 根据key 分组 再把key求和(取决于每条数据中 arr的条数) arr 中有多少条数据 就把多少个key 加起来

            List<A> alist = new List<A>{
                new A{name="a1",a=11,b=12,c=13,d=14,e=15},
                new A{name="a1",a=11,b=12,c=13,d=14,e=17},
                new A{name="a1",a=11,b=13,c=13,d=14,e=17},
                new A{name="a1",a=10,b=13,c=13,d=14,e=17},
                new A{name="a1",a=10,b=13,c=13,d=14,e=17},
                new A{name="a2",a=21,b=22,c=23,d=24,e=25},
                new A{name="a3",a=31,b=32,c=33,d=34,e=35},
                new A{name="a4",a=41,b=42,c=43,d=44,e=45},
                new A{name="a5",a=51,b=52,c=53,d=54,e=55},
                new A{name="a4",a=41,b=42,c=43,d=44,e=47},
                new A{name="a5",a=51,b=52,c=53,d=54,e=57},
                new A{name="a4",a=41,b=42,c=43,d=44,e=49},
                new A{name="a5",a=51,b=52,c=53,d=54,e=59},
            };  //分组求 Key 的和
            var alistarr = alist.GroupBy(a => new { a.name, a.a, a.b, a.c, a.d });    // 根据分组(Key)  有7条    // ‘a 为 name a b c d        A 也就是A (name a b c d e) 每条里面都是个集合
            var selec = alistarr.Select(a => new      // a其实是 ‘a 与 A 组合    就是key - arr
            {
                a.Key.name,     //获取 System.Linq.IGrouping<TKey,TElement> 的键。 Element(元素的意思 可以有多个元素)          
                //所有的Sum 都是要跟在集合后面的  a是 分组后的每条数据  (唯一key value(集合 arr) )
                a = a.Sum(p => a.Key.a),     //  每一条再求和    p是A (那个集合 arr的每个元素 A)     在这里没有用到      
                b = a.Sum(p => a.Key.b),      //  所以就是  进去 集合 arr的每个元素 A 没用到   返回a.Key.b      就相当于arr中 有多少个元素 就加多少次 a.Key.b  
                c = a.Sum(p => a.Key.c),              // 效果就是key的和  (根据key分组 再分组下(key arr)   取得每条 数据的 key的和)     arr 中有多少条数据 就把多少个key 加起来
                d = a.Sum(p => a.Key.d),
                e = a.Sum(p => p.e),       //    a是 key - arr     在arr 中求e 的和
                s = a.Sum(p => p.a)       //     a是 key - arr     在arr 中求a 的和   //每个A里面是有a的  上面是  arr长度个 a.Key.a 的和  这里是 arr 中求a 的和  因为分过组 所以arr 中具有相同a  而又都是arr   一个是arr长度  a.Key.a 之和  一个是arr 中a(和 key.a 相同)的和     所以 a和s 相同      一般不会这么写 逻辑混乱
            }).ToList();


            var alistarr2 = alist.GroupBy(a => new { a.name }).Select(a => new      // 5条
            {    // key - arr
                a.Key.name,
                a = a.Sum(p => p.a),   // 根据name分组(5条 也可理解5组)   求每组中a的和 
                b = a.Sum(p => p.b),
                c = a.Sum(p => p.c),
                d = a.Sum(p => p.d),
                e = a.Sum(p => p.e),
            });

var alist3 = alist.GroupBy(a => new { a.name, a.a }).Select(a => new
{
a.Key.name,
a = a.Sum(p => p.a),
s = a.Sum(p => a.Key.a)
});



class A
{
public string name { get; set; }
public int a { get; set; }
public int b { get; set; }
public int c { get; set; }
public int d { get; set; }
public int e { get; set; }


}

 

 

 

 

 

posted @ 2019-01-28 17:00  ~雨落忧伤~  阅读(98)  评论(0编辑  收藏  举报