首页 > 解决方案 > C#:在数组中查找具有相同 id 的对象并将它们的数量值相加。将它们添加到新对象

问题描述

我有一个从数据库返回的对象数组或列表。让我们以此为例:这是类:

public class products
{
    public string name { get; set; }
    public int quantity { get; set; } 
    public long id{ get; set; }        
}



  List<Product> prod = new List<Product>()
prod = (call to the DB to get data back...)

数组与产品对象一起返回

我需要的是遍历这个数组并将相同 id 的数量相加。意思是,为 id 3 添加 2+7 并将该数据添加到另一个对象,以便新对象具有类似:total: 9, id: 3 然后对于 id 5 再次相同,total: 7, id: 5 等等.

我不知道做这件事的正确方法。我正在查看 Linq,但我使用它的唯一方法是提供特定值。请帮我解决这个问题

foreach (var p in prod){ Now what do i do?}

`

标签: c#arraysobject

解决方案


最简单的方法是使用 GroupBy 和 Sum(都使用 System.Linq):

    List<Product> products = new List<Product>()
    {
        new Product(){Id = 1, Cost = 20.0M },
        new Product(){Id = 1, Cost = 30.0M },
        new Product(){Id = 2, Cost = 20.0M },
        new Product(){Id = 3, Cost = 20.0M },
        new Product(){Id = 3, Cost = 5.0M }
    };

    products.GroupBy(g => g.Id).ToList().ForEach(e => 
    {
            Console.WriteLine($"Total: {
               e.Sum(s => s.Cost)} for {e.Key}");
    });

编辑

使用提供的新信息:您可以对具体类执行此操作:

public class Product
{
   public string name { get; set; }
   public int quantity { get; set; } 
   public long id{ get; set; }        
}

List<Product> products = new List<Product>();
var products = (call to the DB to get data back...).GroupBy(g => g.Id).ToList().ForEach(e => 
    {
       products.Add(new Product() 
       {
          Id = e.Key,
          Quantity = e.Sum(s => s.Quantity)
       })

    });

推荐阅读