我有一个具有三个属性的模型
id int {get; set:}
name varchar {get; set:}
int fundedamount {get;set;}
list<child> childlist {get; set:}
和这样的孩子
int id{get;set;}
int parentid{get;set;}
int amount{get;set;}
我想按父对象对子记录进行分组,然后将其总和使用linq分配给parent.fundedamount。
我正在这样尝试:
model.ForEach(f => f.childlist.Where(f1 => f1.parentid== f.Id).Sum(f2 => f2.Amount));
但是如何将其分配给parent.fundedamount?我需要使用分组依据吗?
我没有这样的linq
foreach (var f in model) {
foreach (var fi in f.childlist)
{
if (fi.parentid== f.Id)
{
f.FundedAmount += (int)fi.Amount;
}
}
}
请提出建议
答案 0 :(得分:0)
首先,我将childlist
与parentId
进行分组,以获得与总和id
相关的不同Amount
的集合。
接下来,对于此集合中的每个组,我更新与fundedamount
相对应的GroupId
,即模型的Id
。
model.childlist.GroupBy(x=> x.parentid).Select(group => new {
GroupId = group.Id,
SumOfGroup = group.Sum(x => x.Amount)
}).ToList()
.ForEach(group => model.First(m => m.Id = group.GroupId).fundedamount = group.SumOfGroup )
答案 1 :(得分:0)
为什么不将FundedAmount设置为只读属性,并使其返回ChildList中Amount的总和?
public int FundedAmount
{
get { return ChildList?.Sum(c => c.Amount) ?? 0; }
}