C# Linq语句问题
我有以下代码,我想将for eaches转换成一个linq语句C# Linq语句问题,c#,linq,C#,Linq,我有以下代码,我想将for eaches转换成一个linq语句 decimal originalCharges = 0; List<int> rdns = new List<int>() { 1, 2 }; foreach (var customerOrder in list) { foreach (Cus
decimal originalCharges = 0;
List<int> rdns = new List<int>()
{
1,
2
};
foreach (var customerOrder in list)
{
foreach (CustomerBillTo billTo in customerOrder.BillTos)
{
originalCharges += billTo.Charges
.Where(charge => rdns.Contains(charge.RateCodeRdn))
.Sum(charge => charge.Amount);
}
}
这给了我一个错误,无法将类型“void”转换为“decimal”
我想我对如何处理原始电荷的+=感到困惑,就像我在第一个示例中的原始forEach循环中所做的那样
这可以在linq语句中完成吗
originalCharges = list.ForEach(co => co.BillTos.ForEach( ));
您只需将费用金额投影到并平铺,然后将其相加
var originalCharges =
(from customerOrder in list
from billTo in customerOrder.BillTos
from charge in billTo.Charges
where rdns.Contains(charge.RateCodeRdn)
select charge.Amount).Sum();
或者,如果您更喜欢流利的方法:
var originalCharges =
list.SelectMany(customerOrder =>
customerOrder.BillTos.SelectMany(billTo =>
billTo.Charges
.Where(charge => rdns.Contains(charge.RateCodeRdn))
.Select(charge => charge.Amount)
)
).Sum();
A将很有帮助,这样我们可以确保提出的解决方案产生相同的结果。
var originalCharges =
list.SelectMany(customerOrder =>
customerOrder.BillTos.SelectMany(billTo =>
billTo.Charges
.Where(charge => rdns.Contains(charge.RateCodeRdn))
.Select(charge => charge.Amount)
)
).Sum();