ASP.NET:EF 5.X - 转换错误

时间:2016-02-17 15:29:44

标签: c# asp.net entity-framework

我正在尝试从数据库中提取信息,然后将这些值一起添加。从数据库中提取信息时没有问题,但是在添加值时似乎存在转换错误。

  

无法隐式转换类型'double?' '加倍'。存在显式转换(您是否错过了演员?)

在我查询的地方,我有这个:

var addition = 0.0;

当我从数据库中提取数据时,我尝试将值添加到此:

addition = addition + clear;

additionclear都是相同的数据类型,这就是为什么我很困惑为什么需要进行任何转换? (双倍的)。

额外信息:clear来自:

var clear = tbl_detail[a].AmountCleared;

tbl_detail是查询数据的数组。

有人可能会参考我收到此错误的原因吗?或者可能指出我正确的方向,因为我不明白为什么:

  1. 它需要转换任何内容,因为它们是相同的数据类型和

  2. 实际上是什么演员,因为当我搜索任何一个时,Google并没有真正帮助我。

3 个答案:

答案 0 :(得分:1)

看起来AmountCleared是一个可以为空的双(双?)。你可以这样做:

addition += clear.Value

如果Clear为null,则抛出InvalidOperationException。

[编辑]如果您想使用空值的默认值,也可以使用addition += clear ?? 0.0

您可以将AmoutCleared更改为double。我怀疑你是先通过设计器或数据库创建的,并在数据库列上使用'allow nulls',这就是为什么你得到一个可以为空的类型。因此,您必须将数据库类型更改为“不允许空值”。但是,如果没有看到数据类型tbl_detail [a]的定义或知道如何生成它,我无法帮助你。

答案 1 :(得分:1)

AmountCleared实际上是一个Nullable类型(Nullable),它允许C#值类型表示SQL服务器Null(值类型永远不能赋值为null)

您可以通过简单地调用.Value属性来获取可空类型的基础值,但是如果值为null,则会抛出InvalidOperationException,您可以通过调用.HasValue来检查它是否具有值

试试这个:

addition += clear.HasValue ? clear.Value : 0;

答案 2 :(得分:0)

clear是可以为空的值 安全地操纵nullables使用:

if(clear.hasValue)
{
    addition += clear.Value;
}

如果提供的值为null,您还可以使用空合并运算符??回退到默认值

addition += clear ?? 0.0;