我在一个列表中有两列。我想通过分组来收集这些列。但我不能做分组工作。如果你帮助我,我很高兴。
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
非常感谢
答案 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只是分组键。