C#中System.Decimal转Nullable<System.Double>无效转换问题排查
问题分析与解决方案
为什么会出现这个类型转换错误?
你遇到的问题本质不是EDMX或数据库的类型“变成了Decimal”,而是你赋值给PreditTotal的右侧值是Decimal类型,和模型定义的Nullable<double>不兼容,导致编译器报错。常见触发场景包括:
- 用了带
m后缀的Decimal字面量(比如写了PreditTotal = 100.5m); - 赋值的数据源是其他返回Decimal类型的变量、属性或查询结果;
- 极少数情况是EDMX映射异常,把数据库的float字段错误映射成了Decimal(但你明确EDMX定义为
Nullable<double>,这种概率较低)。
解决方法
针对不同场景,可选择以下方案:
- 显式转换类型:如果赋值的Decimal值合理,直接转成
double?即可。示例:// 处理可为null的Decimal值 model.PreditTotal = yourDecimalValue.HasValue ? (double?)yourDecimalValue.Value : null; // C# 6+简化写法 model.PreditTotal = yourDecimalValue as double?; - 修正赋值的数据源类型:如果是自定义字面量,去掉
m后缀改用double类型(比如100.5而非100.5m);如果来自其他变量,确认是否可将该变量类型改为double。 - 检查并修复EDMX映射:打开Model1.edmx,找到
PreditTotal字段,查看“类型”属性是否为Double(可空)。若映射错误,手动修改为Double,保存后重新生成EDMX代码文件。 - 检查数据库视图定义:确认视图中该字段的实际返回类型是否为float。如果视图因函数/转换返回Decimal,可通过
CAST或CONVERT转成float,比如SQL Server中:SELECT CAST(your_column AS float) AS PreditTotal FROM your_table
内容的提问来源于stack exchange,提问作者yihang hwang
相关产品推荐
相关产品推荐

