两列分组总和

时间:2016-12-13 12:12:08

标签: c# linq

我在一个列表中有两列。我想通过分组来收集这些列。但我不能做分组工作。如果你帮助我,我很高兴。

void Main() {
    List<MyList> lists = new List<MyList>();
    lists.Add(new MyList { bankCode = "102 01 001", fCode = "100 01 001", Money = 500 });
    lists.Add(new MyList { bankCode = "102 01 001", fCode = "101 01 001", Money = 600 });
    lists.Add(new MyList { bankCode = "102 01 001", fCode = "120 01 001", Money = 700 });
    lists.Add(new MyList { bankCode = "102 01 001", fCode = "320 01 001", Money = 200 });
    lists.Add(new MyList { bankCode = "102 01 001", fCode = "100 01 001", Money = -100 });
    lists.Add(new MyList { bankCode = "102 01 001", fCode = "101 01 001", Money = 400 });
    lists.Add(new MyList { bankCode = "102 01 001", fCode = "320 01 001", Money = -200 });
    lists.Add(new MyList { bankCode = "102 01 001", fCode = "120 01 001", Money = -200 });

    var myList = lists.GroupBy(l => new { l.bankCode, l.fCode }).Select(l => new
    {
        groupCode = ??,
        plusMoney = l.Sum(k => k.Money > 0 ? k.Money : 0),
        negativeMoney = l.Sum(k => k.Money < 0 ? k.Money : 0)
    }).Dump();
    }
    public class MyList {
        public string bankCode { get; set; }
        public string fCode { get; set; }
        public decimal Money { get; set; }        
    }

我需要的预期结果是 Expected Output

非常感谢

1 个答案:

答案 0 :(得分:1)

看起来你想要创建bankCode的总数以及fCode的总数:

var myList = lists.GroupBy(l =>l.bankCode).Concat(lists.GroupBy(l=>l.fCode)).Select(l => new
    {
        groupCode = l.Key,
        plusMoney = l.Sum(k => k.Money > 0 ? k.Money : 0),
        negativeMoney = l.Sum(k => k.Money < 0 ? k.Money : 0)
    });

如果按new { l.bankCode, l.fCode }分组,则可以对这两个代码的唯一组合进行分组。由于该示例对于所有银行代码都是相同的,因此剩余的有效分组与仅在fCode上相同。通过concat设置每个代码的groupby,您可以像在示例图像中一样单独获取每个代码。由于每个组都有一个字符串作为键,因此groupCode只是分组键。