对字典对象组成的List集合进行Lambda表达式的GroupBy

昨天同事问了一个问题,怎么把字典对象组成的List集合进行按code分组,将其qty进行Sum累和。

考虑了C#的Lambda表达对集合的万能性,试了一下,代码如下:


        public static void Main(string[] args)
        {
            TestLambdaGroupBy();
            Console.Read();
        }

        public static void TestLambdaGroupBy()
        {
            //创建类型为Dictionary的List集合,目的是要将同一code的qty进行汇总
            var dic1 = new Dictionary();
            dic1.Add("code", "code1");
            dic1.Add("name", "name1");
            dic1.Add("qty", 2);
            var dic2 = new Dictionary();
            dic2.Add("code", "code1");
            dic2.Add("name", "name1");
            dic2.Add("qty", 7);
            var dic3 = new Dictionary();
            dic3.Add("code", "code2");
            dic3.Add("name", "name2");
            dic3.Add("qty", 5);
            var list = new List>();
            list.Add(dic1);
            list.Add(dic2);
            list.Add(dic3);
            //利用Lambda表达是的GroupBy函数进行分组
            list = list.GroupBy(listItem => listItem["code"]).Select(group =>
            {
                var dic = new Dictionary();
                dic.Add("code", group.Key);
                dic.Add("name", group.Select(g => g["name"]).First());
                dic.Add("qty", group.Sum(g => Convert.ToInt32(g["qty"])));
                return dic;
            }).ToList();
            foreach (var item in list)
            {
                Console.WriteLine("code: " + item["code"] + " name: " + item["name"] + " qty: " + item["qty"]);
            }
        }

运行结果:



你可能感兴趣的:(编程)