基于两列聚合两个相同的列表并对第三列求和

Tro*_*ics 3 c#

我有两个类类型 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)

我需要这样的输出。实现这一目标的最佳方法是什么?

ger*_*rmi 8

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)具有相同的,那么族元素FanPrefix在一起(GroupBy),最后我们总结了每组的数额。

  • @Tronics你可以这样做像`MyDate = g.Min(_ =&gt; _.MyDate)` (2认同)