Blazor计算汽车销售总额时触发Nullable对象非空错误求助
解决Nullable object must have a value错误(计算可空decimal字段总和)
你的错误根源是直接强制转换可空decimal类型(decimal?)。模型里的Month1Sales和Month2Sales都是可空字段,当数据库中这两个字段存在null值时,用(decimal)@context.Month1Sales这种强制转换方式,本质是在访问可空类型的Value属性——而null状态的可空类型没有可用的Value,因此抛出Nullable object must have a value错误。
另外你的代码还有两处逻辑问题:
- 调用
Math.Round(Total, 3)后未将结果赋值回变量,等于白执行了四舍五入操作 - 表格列中使用的
TotalSales和你前面计算的Total变量无关联,等于没用到自己计算的值
修正后的代码示例
方式1:计算后直接在表格中使用结果
@{ // 用空合并运算符给null字段设默认值0,避免转换报错 decimal total = (context.Month1Sales ?? 0) + (context.Month2Sales ?? 0); total = Math.Round(total, 3); } <MudTd DataLabel="Total">@total</MudTd>
方式2:将计算结果赋值给模型的TotalSales字段(如需保存到数据库)
@{ // 计算并赋值给TotalSales字段 context.TotalSales = Math.Round((context.Month1Sales ?? 0) + (context.Month2Sales ?? 0), 3); } <MudTd DataLabel="Total">@context.TotalSales</MudTd>
也可以用GetValueOrDefault()替代空合并运算符,效果一致:
decimal total = context.Month1Sales.GetValueOrDefault() + context.Month2Sales.GetValueOrDefault();
内容的提问来源于stack exchange,提问作者Kibofigs
相关产品推荐
相关产品推荐

