C# 两列分组和
我在一个列表中有两列。我想通过分组来收集这些列。但是我不能做分组工作。如果你能帮助我,我很高兴C# 两列分组和,c#,linq,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 = "10
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; }
}
void Main(){
列表=新列表();
添加(新的MyList{bankCode=“102 01 001”,fCode=“100 01 001”,Money=500});
添加(新的MyList{bankCode=“102 01 001”,fCode=“101 01 001”,Money=600});
添加(新的MyList{bankCode=“102 01 001”,fCode=“120 01 001”,Money=700});
添加(新的MyList{bankCode=“102 01 001”,fCode=“320 01 001”,Money=200});
添加(新的MyList{bankCode=“102 01 001”,fCode=“100 01 001”,Money=-100});
添加(新的MyList{bankCode=“102 01 001”,fCode=“101 01 001”,Money=400});
添加(新的MyList{bankCode=“102 01 001”,fCode=“320 01 001”,Money=-200});
添加(新的MyList{bankCode=“102 01 001”,fCode=“120 01 001”,Money=-200});
var myList=lists.GroupBy(l=>new{l.bankCode,l.fCode})。选择(l=>new
{
组码=??,
plusMoney=l.Sum(k=>k.Money>0?k.Money:0),
negativeMoney=l.Sum(k=>k.Money<0?k.Money:0)
}).Dump();
}
公共类MyList{
公共字符串银行代码{get;set;}
公共字符串fCode{get;set;}
公共十进制货币{get;set;}
}
我要求的预期结果是
非常感谢您似乎希望创建银行代码总计和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)
});
var myList=lists.GroupBy(l=>l.bankCode).Concat(lists.GroupBy(l=>l.fCode))。选择(l=>new
{
groupCode=l.键,
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就是分组键。您想在groupCode
中得到什么?我想您想要l.key
或l.key.fCode
那里。当我想向组中添加另一个元素时,我该怎么做?例如,当我添加一个名为'month'@Me.name的对象时,可以添加另一个Concat
(在选择之前)和一个groupby on month,但如果month是一个数值,则它必须是month.ToString()(或该月的另一个字符串表示形式)对于具有相同签名且concat有效的组,或者如果您希望按bankCode和MOUNT以及fCode和MOUNT分组,您可以将各个GroupBy更改为包含MOUNT,或者在concat之后添加一个group by,该concat在MOUNT.lists.add上添加一个额外的group by(新MyList{bankCode=“102 01 001”,fCode=“100 01 001”,货币=500,月份=10});我在这里添加了一个项目,为期一个月。这是一个数值。我尝试添加时出错。实际上,这些项目都在那里。我通过缩短示例使其清晰而给出@我的名字