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”作为主键。
答案 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 )});