2012-11-05 24 views
0

我在我的數據庫中有一個空值,如果我嘗試對其執行任何數學運算,會給我一個錯誤。我試圖把這個在我的控制器動作:IsNullOrEmpty不工作

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) 

回答

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-參數If):

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

If有兩個參數,如果它不是null,則返回第一個參數,如果是,則返回第二個參數。

+0

感謝您的幫助,這是我的答案。 – user1477388

+0

+1空合併操作(以及答案;)) – keyboardP

+0

是的,謝謝你的額外「空合併操作符」。對我來說這也是一種常見操作,所以很高興看到這一點。 – user1477388

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 
+0

「試試這個......可能工作.. 「?你似乎對自己不太確定。 – Gabe

1

你可以把字符串IsNullOrEmpty作爲檢查的uninitialiaed字符串變量,而不是作爲一個對象是空的檢查。我想你想要這樣的東西,爲了最大限度的安全。

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 
+0

感謝您的幫助。這與加貝斯的答案相同(我看不出誰先說)。這個對我有用。 – user1477388

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; 
+2

海報寫VB;我沒有看到C#是非常有用的。 – Gabe

+0

但是,感謝您的嘗試:) – user1477388

0

您還可以檢查:

If item.Tbl_Food.Fiber_TD_g.Equals(Nothing) Then 
    item.Tbl_Food.Fiber_TD_g = 0 
End If 
+0

Fiber_TD_g'如何保存'DbNull'的值? – Gabe

+0

同意你的意見。 – NeverHopeless

0
item.Tbl_Food.Fiber_TD_g = item.Tbl_Food.Fiber_TD_GetValueOrDefault()