【问题标题】:linq aggregatelinq 聚合
【发布时间】:2009-03-29 06:21:30
【问题描述】:
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;} 
}

如何对两列求和。并且电话列可以是最后一行或任意行

【问题讨论】:

    标签: linq aggregate


    【解决方案1】:

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

        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 项目使其效率更高,但代价是不那么容易使用。如果您需要处理大量数据,您可能需要研究它。

    【讨论】:

      【解决方案2】:
      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) });
      

      【讨论】:

      • 类类别 { 公共字符串名称 { 获取;放; } 公共 int CountA { 获取;设置;} 公共 int CountB { 获取;设置;}公共字符串电话{获取; set;} } 我如何将两列相加。并且电话列可以是最后一行或任意行
      猜你喜欢
      • 2011-07-31
      • 2015-10-29
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多