You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:22:49