0

我的数据库中有一个空值,如果我尝试对其执行任何数学运算,它会给我一个错误。我试着把它放在我的控制器动作中:

If String.IsNullOrEmpty(item.Tbl_Food.Fiber_TD_g) Then
            item.Tbl_Food.Fiber_TD_g = 0
End If

这是我的领域模型:

Public Property Fiber_TD_g() As Nullable(Of Double)

但是,它说“可空对象必须有一个值”。上If String.IsNullOrEmpty(item.Tbl_Food.Fiber_TD_g) Then线。如何检查“字符串”(它是双精度,而不是字符串)是否为空并将其默认为零,正确吗?

编辑:

我在下面尝试了一个建议,但我的控制器中不再出现错误,而是在我的视图中。它说,“可为空的对象必须有一个值。” FiberTotal += item.Tbl_Food.Fiber_TD_g在我看来就行了。

Dim food = db.Tbl_Food_Logs.Where(Function(x) x.FLog_Employee_ID = empId And x.FLog_Created_Date >= date2 And x.FLog_Created_Date < tomorrow)

For Each item In food

    If IsDBNull(item.Tbl_Food.Fiber_TD_g) Then
        item.Tbl_Food.Fiber_TD_g = 0
    End If

Next
Return View(food)
4

6 回答 6

3

顾名思义,String.IsNullOrEmpty是一个字符串操作。如果您通过double. 而是检查它是否Is Nothing

If item.Tbl_Food.Fiber_TD_g Is Nothing Then
            item.Tbl_Food.Fiber_TD_g = 0
End If

这个操作很常见,VB 有一个快捷方式,称为空合并运算符(2-argument If):

item.Tbl_Food.Fiber_TD_g = If(item.Tbl_Food.Fiber_TD_g, 0)

If有两个参数时,如果它不为空,则返回第一个参数,如果为空,则返回第二个。

于 2012-11-05T13:26:52.957 回答
2
If IsNull(item.Tbl_Food.Fiber_TD_g) Then
        item.Tbl_Food.Fiber_TD_g = 0
End If

或者

If Trim(item.Tbl_Food.Fiber_TD_g) Then
        item.Tbl_Food.Fiber_TD_g = 0
End If
于 2012-11-05T13:24:19.183 回答
1

您可以将字符串 IsNullOrEmpty 视为检查未初始化的字符串变量,而不是检查对象是否为空。我认为您想要这样的东西,以获得最大的安全性。

 If Not item Is Nothing Then
        If Not item.TBL_food Is Nothing Then
            If Not item.Tbl_Food.Fiber_TD_g Is Nothing Then
                'do something
            End If
        End If
    End If
于 2012-11-05T13:26:44.237 回答
0

将模型部分更改为:

public double? Fiber_TD_g { get; set; }

进而

item.Tbl_Food.Fiber_TD_g = item.Tbl_Food.Fiber_TD_g.HasValue ? item.Tbl_Food.Fiber_TD_g.Value : 0;
于 2012-11-05T13:28:12.987 回答
0

您还可以检查:

If item.Tbl_Food.Fiber_TD_g.Equals(Nothing) Then
   item.Tbl_Food.Fiber_TD_g = 0
End If
于 2012-11-05T13:31:07.050 回答
0
item.Tbl_Food.Fiber_TD_g = item.Tbl_Food.Fiber_TD_GetValueOrDefault()
于 2012-11-05T13:32:51.730 回答