tac*_*aco 5 c# linq lambda nullreferenceexception
这是有问题的查询
return _projectDetail.ExpenditureDetails
.Where(detail => detail.ProgramFund == _programFund
&& detail.Expenditure.User == _creditCardHolder)
.Sum(detail => detail.ExpenditureAmounts.FirstOrDefault(
amount => amount.isCurrent && !amount.requiresAudit)
.CommittedMonthlyRecord.ProjectedEac);
Run Code Online (Sandbox Code Playgroud)
表结构
ProjectDetails(1到多个)支出详细信息
支出详细信息(1到多个)支出
支出支出额(1比1)承诺月度记录
ProjectedEac是CommittedMonthlyRecords上的十进制字段.
我在单元测试中发现的问题(尽管不太可能发生),以下行可能为null:
detail.ExpenditureAmounts.FirstOrDefault(
amount => amount.isCurrent && !amount.requiresAudit)
Run Code Online (Sandbox Code Playgroud)
我的原始查询是一个嵌套循环,在那里我将多次访问数据库,我不想重复.我在这里看到了类似的问题,但解决方案似乎并不合适.
有任何想法吗?
为什么不直接检查 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;
});
Run Code Online (Sandbox Code Playgroud)