linq聚合

时间:2009-03-29 06:21:30

标签: linq aggregate

class Category
{        
    public string Name { get; set; }
    public int Count { get; set;}
}


Name Count
AA   2
BB   3
AA   4

我有IEnumerable<Category>

并希望获得具有唯一名称和多个条目总和的类别列表

输出

Name Count
AA   6
BB   3

更新

class Category 
{ 
public string Name { get; set; } 
public int CountA { get; set;} 
public int CountB { get; set;} 
public string Phone { get; set;} 
}

我如何总结两列。并且电话栏可以是最后一行或任何一行

2 个答案:

答案 0 :(得分:5)

您的更新问题在电话号码方面并不完全清楚,但我怀疑您需要以下内容:

    var query = from category in list
                group category by category.Name into grouped
                select new { Name = grouped.Key,
                             SumA = grouped.Sum(x => x.CountA),
                             SumB = grouped.Sum(x => x.CountB),
                             Phone = grouped.Last().Phone };

顺便说一下,将grouped.Last()更改为grouped.First()会更有效率。

以这种方式评估多个聚合通常不是非常有效。我和Marc Gravell开发的Push LINQ项目使其效率更高,但代价是不那么容易使用。如果您需要处理大量数据,可能需要查看它。

答案 1 :(得分:1)

var foo = new List<Category>() { 
                new Category() { Name = "AA", Count = 2},
                new Category() { Name = "BB", Count = 3},
                new Category() { Name = "AA", Count = 4}
            };

            var bar = foo.GroupBy(c => c.Name).Select(g => new Category(){ Name = g.Key, Count = g.Sum(c => c.Count) });