我仍然与LINQ达成协议,我正在尝试将以下foreach循环重构为它的LINQ等效项。这是我正在尝试转换的foreach循环;重构LINQ ...从列表中乘以属性和子属性
var NetTotal = 0M;
foreach (var cheque in ListOfCheques)
{
var exchangeRate = (from exc in cheque.ExchangeRates
where exc.Type == EnumExchangeRate.ForCheque
select exc).FirstOrDefault();
NetTotal = exchangeRate != null ? NetTotal + cheque.NetAmount * exchangeRate.Rate : NetTotal + cheque.NetAmount;
}
return NetTotal ;
和我想到的LINQ代码;
var NetTotal = (from cheque in ListOfCheques
join exc in ListOfCheques.SelectMany(b => b.ExchangeRates) on cheque.ID equals exrate.Cheque.ID into chequeWithRate
where income.ExchangeRates.Select(x => x.Type).Equals(EnumExchangeRate.ForCheque)
from ur in chequeWithRate.DefaultIfEmpty()
select ur).Sum(x => x.Cheque.NetAmount * x.Rate);
return NetTotal;
我正在努力的重要观点;
- 这有可能是检查类中的“ExchangeRates”列表中不存在的,即它不需要汇率。
- 如果没有找到汇率,它应该默认为1.我该如何设置...我希望将其设置为DefaultIfEmpty(1)。
任何帮助,非常感谢。
谢谢柯克。一个优秀的,很好的解决方案。您的解释给了我一种重新审视我的foreach循环的新方法!谢谢你的时间。 – Rowen