我有两个类类型 TestClass 的列表。我只需要聚合两个列表。
public class TestClass
{
private string _fan;
private string _prefix;
private decimal _amount;
#region Properties
public string Fan
{
get { return _fan; }
set { _fan = value; }
}
public string Prefix
{
get { return _prefix; }
set { _prefix = value; }
}
public decimal Amount
{
get { return _amount; }
set { _amount = value; }
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
如果 Fan 和 Prefix 列具有相同的值,那么我只需要将它们作为一列并求和。怎么做?
LIST 1
FAN PREFIX AMOUNT
F1 P1 10
F1 P2 20
F2 P2 50
LIST 2
FAN PREFIX AMOUNT
F1 P1 30
F1 P3 20
F2 P2 30
OUTPUT
FAN PREFIX AMOUNT
F1 P1 40
F1 P2 20
F1 P3 20
F2 P2 80
Run Code Online (Sandbox Code Playgroud)
我需要这样的输出。实现这一目标的最佳方法是什么?
var l1 = new List<TestClass>
{
new TestClass{Fan = "F1", Prefix = "P1", Amount = 10},
new TestClass{Fan = "F1", Prefix = "P2", Amount = 20},
new TestClass{Fan = "F2", Prefix = "P2", Amount = 50},
};
var l2 = new List<TestClass>
{
new TestClass{Fan = "F1", Prefix = "P1", Amount = 30},
new TestClass{Fan = "F1", Prefix = "P3", Amount = 20},
new TestClass{Fan = "F2", Prefix = "P2", Amount = 30},
};
var result = l1.Concat(l2).GroupBy(f => new { f.Fan, f.Prefix })
.Select(g => new TestClass
{
Fan = g.Key.Fan,
Prefix = g.Key.Prefix,
Amount = g.Sum(_ => _.Amount)
})
.ToList();
//Fan Prefix Amount
//F1 P1 40
//F1 P2 20
//F2 P2 80
//F1 P3 20
Run Code Online (Sandbox Code Playgroud)
首先,我们把两个列表一起(List.Concat)具有相同的,那么族元素Fan和Prefix在一起(GroupBy),最后我们总结了每组的数额。