组合同一列表中的元素

时间:2012-09-28 09:38:48

标签: c# linq list

假设我有一个来自这样的数据库的列表:

List<Item> list =
{
    new Item
    {
        TypeID = 2,
        Count = 5
    },
    new Item
    {
        TypeID = 2,
        Count = 7
    },
    new Item
    {
        TypeID = 5,
        Count = 2
    }
};

我想用相同的TypeID总结所有元素,以便我有一个仅包含两个元素的最终结果列表:

List<Item> list =
{
    new Item
    {
        TypeID = 2,
        Count = 12
    },
    new Item
    {
        TypeID = 5,
        Count = 2
    }
};

如何使用LINQ实现此目的?
干杯
西蒙

3 个答案:

答案 0 :(得分:7)

list.GroupBy(x=>x.TypeID)
    .Select(x=>new Item(){TypeID=x.Key,Count=x.Sum(y=>y.Count) })
    .ToList();

答案 1 :(得分:5)

您可以先使用GroupByTypeID进行分组,然后对每个群组Sum进行分组:

var result = list.GroupBy(x => x.TypeID)
                 .Select(g => new Item() { 
                                  TypeId = g.Key, 
                                  Count = g.Sum(x => x.Count)
                         })
                 .ToList();

答案 2 :(得分:0)

Linq扩展方法联盟。

var mergedList = list1.Union(list2).ToList();