c# - 如何避免填充所有对象属性 - 而是只填充需要的一个并保持原样 - C#
问题描述
我想对我的对象列表进行分组并将它们的总数相加,所以基本上最终结果可能如下所示:
1 Coca cola 3x 15.00$
2 Pepsi 1x 5.00$
而不是这个:
1 Coca Cola 2x 10.00$
2 Pepsi 1x 5.00$
3 Coca Cola 1x 5.00$
这是我的代码:
List<Product> result = productsList
.GroupBy(l => l.Article.Title)
.Select(cl => new Product
{
// Avoid assigning all the properties somehow?
TotalAmount = cl.Sum(c => c.TotalAmount),
}).ToList();
我的Product
班级有 20 个属性,我想避免填充所有属性,但我想保持它们的值不变(我不想丢失其他属性的值)。
TotalAmount
如果我想对产品进行分组并根据我想对它们求和而改变它们,那么这是否可能实现,就是这样。
这有可能吗?
解决方案
我认为只有使用反射映射属性才有可能。 https://stackoverflow.com/a/8724150
然后,更改对象的新实例的 TotalAmount ......类似这样的东西:
var result = productsList
.GroupBy(l => l.Article.Title)
.Select(cl =>
{
var product = new Product();
Reflection.CopyProperties(cl.First(), product);
product.TotalAmount = cl.Sum(c => c.TotalAmount);
return product;
}).ToList();
或者,您可以将结果映射到新的类类型:
var result = productsList
.GroupBy(l => l.Article.Title)
.Select(cl => new ProductItem
{
Product = cl.First(),
TotalAmount = cl.Sum(c => c.TotalAmount),
}).ToList();
推荐阅读
- json - 如何阻止 JQ 过滤器将键匹配到其他键的每个排列
- mysql - MySQL远程访问,不能暴露端口
- ruby-on-rails - Rails Action Cable:如何访问 ApplicationCable::Channel 类中的实例变量?
- sql-server - 如何使用唯一的文件名进行备份
- mysql - Mysql查询匹配属于一个组的特定个人
- windows - 是否有专注于已知 Tabindex 的键盘快捷键
- r - 提取具有连接值的子矩阵
- python - Windows 10 上的 venv 中的 pip:'启动器中的致命错误:无法使用 '"c:\users\..." 创建进程'在烧瓶教程中遇到
- ms-access - 创建根据类别调整的计数器
- php - 阻止 PHAR 创建目录