如何在对其进行分组后得到列表的总和

时间:2016-12-21 13:23:41

标签: c# linq

struct element
    {
        public string employeeID;
        public string objectID;
        public int quantity;
        public element(string employeeID1, string objectID1, int quantity1)
        {
            employeeID = employeeID1;
            objectID = objectID1;
            quantity = quantity1;
        }
    }

我有这个清单:

        list1.Add(new element("XXX1", "TV", 1));
        list1.Add(new element("XXX1", "TV", 2));
        list1.Add(new element("XXX1", "Radio", 7));
        list1.Add(new element("XXX2", "TV", 6));
        list1.Add(new element("XXX2", "Radio", 5));
        list1.Add(new element("XXX2", "Radio", 5));

我想要一个按employeeID分组的新列表,然后是ObjectID及其总和。 在上面的例子中,我想要实现这个列表:

{(XXX1", "TV", 3),("XXX1", "Radio", 7),("XXX2", "TV", 6),("XXX2", "Radio", 10)}

我试过了:

var listwithsum = list1.
            GroupBy(z => z.employeeID)
            .Select(x =>x
                    .GroupBy(result => result.objectID, result => result.quantity)
                    .Select(result => new { employeeID = x.Key, objectID = result.Key, sum = result.Sum() })
                    .ToArray()
        );

但是,即使它有效,我也可以使用我需要的元素获得一个列表,但它们位于一个嵌套列表中,其中“employeeID”作为主键。

1 个答案:

答案 0 :(得分:4)

您只需要1 GroupBy

var listwithsum = list1
        .GroupBy(z => new { z.employeeID, z.objectID })
        .Select( x => new { x.Key.employeeID, x.Key.objectID, sum = x.Sum(y => y.quantity )});

实例:http://rextester.com/OFKP61499