【问题标题】:how to get a SUM in Linq?如何在 Linq 中获得 SUM?
【发布时间】:2013-04-27 10:29:11
【问题描述】:

我需要执行以下操作,我有一个 List ,其类包含 2 个整数 id 和计数

现在我想做以下 linq 查询:

get the sum of the count for each id

但可能有相同 id 的项目,因此应该对其进行汇总,例如:

id=1, count=12
id=2, count=1
id=1, count=2

应该是:

id=1 -> sum 14
id=2 -> sum 1

如何做到这一点?

【问题讨论】:

标签: c# linq


【解决方案1】:

GroupId 的项目,然后 sum 每个组中的Counts:

var result = items.GroupBy(x => x.Id)
                  .Select(g => new { Id = g.Key, Sum = g.Sum(x => x.Count) });

【讨论】:

  • 不想用新的怎么办,只是总结一下,然后把我有的对象拿回来
  • 您期待什么结果? {Item = {id=1, count=12}, Sum=14} 之类的东西?
  • @Caramiriel 是的,看起来他确实想创建与原始元素相同类型的新项目,并将它们的计数设置为总数,例如:var result = items.GroupBy(x => x.Id).Select(g => new HisType {id = g.Key, count = g.Sum(x => x.Count) });
【解决方案2】:

试试看,

 .GroupBy(x => x.id)
 .Select(n => n.Sum(m => m.count));

【讨论】:

    【解决方案3】:

    下面的程序...

    struct Item {
        public int Id;
        public int Count;
    }
    
    class Program {
    
        static void Main(string[] args) {
    
            var items = new [] {
                new Item { Id = 1, Count = 12 },
                new Item { Id = 2, Count = 1 },
                new Item { Id = 1, Count = 2 }
            };
    
            var results =
                from item in items
                group item by item.Id
                into g
                select new { Id = g.Key, Count = g.Sum(item => item.Count) };
    
            foreach (var result in results) {
                Console.Write(result.Id);
                Console.Write("\t");
                Console.WriteLine(result.Count);
            }
    
        }
    
    }
    

    ...打印:

    1       14
    2       1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 2022-01-17
      • 2021-01-09
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多