gpt4 book ai didi

c# - 正确处理 lambda 表达式中可能出现的 System.NullReferenceException

转载 作者:太空狗 更新时间:2023-10-29 23:35:11 27 4
gpt4 key购买 nike

这是有问题的查询

return _projectDetail.ExpenditureDetails
.Where(detail => detail.ProgramFund == _programFund
&& detail.Expenditure.User == _creditCardHolder)
.Sum(detail => detail.ExpenditureAmounts.FirstOrDefault(
amount => amount.isCurrent && !amount.requiresAudit)
.CommittedMonthlyRecord.ProjectedEac);

表结构
ProjectDetails (1 to Many) 支出明细
ExpenditureDetails(1 到多)ExpenditureAmounts
ExpenditureAmounts (1 to 1) CommittedMonthlyRecords

ProjectedEac 是 CommittedMonthlyRecords 上的小数字段。

我在单元测试中发现的问题(尽管不太可能发生),即以下行可能为空:

detail.ExpenditureAmounts.FirstOrDefault(
amount => amount.isCurrent && !amount.requiresAudit)

我的原始查询是一个嵌套循环,我会在其中多次访问数据库,我不想重复。我在这里查看了一些类似的问题,但是 the solution didn't seem to fit .

有什么想法吗?

最佳答案

为什么不检查 null?

return _projectDetail.ExpenditureDetails.Where(detail => 
detail.ProgramFund == _programFund &&
detail.Expenditure.User == _creditCardHolder
).Sum(detail => {
var a = detail.ExpenditureAmounts.FirstOrDefault(
amount => amount.isCurrent && !amount.requiresAudit
);
return a != null ? a.CommittedMonthlyRecord.ProjectedEac : 0.0m;
});

关于c# - 正确处理 lambda 表达式中可能出现的 System.NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2769211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com