如何避免填充所有对象属性-而是只填充所需的一个属性,并保持其余属性不变-C#

如何避免填充所有对象属性-而是只填充所需的一个属性,并保持其余属性不变-C#,c#,linq,group-by,sum,C#,Linq,Group By,Sum,我想对我的对象列表进行分组,并对它们的总数进行求和,因此最终结果可能如下所示: 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.

我想对我的对象列表进行分组,并对它们的总数进行求和,因此最终结果可能如下所示:

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();
列表结果=产品列表
.GroupBy(l=>l.Article.Title)
.选择(cl=>新产品
{
//避免以某种方式分配所有属性?
TotalAmount=cl.Sum(c=>c.TotalAmount),
}).ToList();
我的
Product
类有20个属性,我希望避免填充所有属性,但我希望保持它们的值不变(我不希望丢失其他属性的值)

所以,如果我想对产品进行分组,并将它们的
TotalAmount
更改为我想对它们求和,那么这是可能实现的,仅此而已


这有可能吗?

我认为只有通过使用reflaction映射属性才有可能。

然后,更改对象新距离的总量。。。诸如此类:

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();

您可能希望生成一些代码,这些代码将使用与
GroupBy
相同的属性集,并创建
产品
对象。。。并在“产品”中添加适当的深度克隆。。。真的没有什么内在的it@AlexeiLevenkov请你举个例子,让我接受它作为答案,这可能对很多人都有用。感谢AlexeiGood对一般解决方案的阐述。请注意,要在一般情况下有合理的行为,GroupBy和“共享”属性需要匹配,否则您将覆盖一些其他属性,如{“cola”、$3、罐装}、{“cola”、$5、罐装}产生{“cola”、$8、罐装},这可能是意外的结果(可能{“cola”、$8、undefined}更好,这取决于具体情况)。编写这样的代码是读者的练习:)