c# - 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?}
`
解决方案
最简单的方法是使用 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)
})
});
推荐阅读
- spring-boot - MvcResult 的 getResponse().getContentAsString() 返回一个空数组
- reactjs - React-Bootstrap 模式仅显示和删除最后一个映射元素
- database - 我的 BigTable 架构会导致热点吗?
- mongodb - 带有卷的mongo docker如何指定logpath和dbpath?
- bash - Shell 脚本在作为 AWS SSM 命令的一部分运行时出错
- javascript - 存储 Angular 应用的动作映射
- blazor-server-side - 使用作为参数传递给页面的数据渲染组件
- c - 如何让 printf 显示计算机之前执行的计算?
- ios - 以日期格式快速获取过去 7 天和接下来 7 天
- python - 为什么我的 python 代码没有写入 MYSQL 数据库,使用实用程序代码文件