给定
class Row
{
public int CustomerId;
public decimal Purchase;
}
通过客户的总购买量获得另一个系列的最简单方法是什么?基本上是 GroupBy 加上添加的购买。
rows.GroupBy(r => r.CustomerId);
性能不是一个因素,因为集合相当小。
编辑 假设 Row 类有几个属性,我希望分组结果是特定类型,而不是匿名的。
class Row
{
public int CustomerId;
public decimal Purchase;
public string SomeProp1;
public double SomeProp2;
public long SomeProp3;
}
class TotalsRow
{
public int CustomerId;
public decimal TotalPurchases;
public string SomeProp1;
public double SomeProp2;
public long SomeProp3;
}
EDIT2 刚刚意识到之前的编辑没有意义,因为我正在合并几行。我实际上正在寻找的是包含等于组内所有行的属性。假设除 Purchase 之外的所有上述属性都满足此要求,这就是我想出的解决方案。
rows.GroupBy(r => r.CustomerId)
.Select(g => new TotalsRow()
{
CustomerId= g.Key,
TotalPurchases = g.Sum(gr => gr.Purchase),
SomeProp1 = g.First().SomeProp1);
SomeProp2 = g.First().SomeProp2);
SomeProp3 = g.First().SomeProp3);
}
);