linq聚合

5 linq aggregate

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


Name Count
AA   2
BB   3
AA   4
Run Code Online (Sandbox Code Playgroud)

我有一个 IEnumerable<Category>

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

产量

Name Count
AA   6
BB   3
Run Code Online (Sandbox Code Playgroud)

更新

class Category 
{ 
public string Name { get; set; } 
public int CountA { get; set;} 
public int CountB { get; set;} 
public string Phone { get; set;} 
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 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 };
Run Code Online (Sandbox Code Playgroud)

更改grouped.Last()grouped.First()会更有效率,顺便说一句.

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


Las*_*sus 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) });
Run Code Online (Sandbox Code Playgroud)