0

データベースに NULL 値があり、数値演算を実行しようとするとエラーが発生します。これをコントローラーアクションに入れてみました:

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)

ただし、「Nullable オブジェクトには値が必要です」と表示されます。ライン上If String.IsNullOrEmpty(item.Tbl_Food.Fiber_TD_g) Then。「文字列」(文字列ではなく double) が空であり、デフォルトでゼロに設定されているかどうかを確認するにはどうすればよいですか?

編集:

以下の提案を試しましたが、コントローラーではエラーが発生しなくなりましたが、代わりにビューでエラーが発生しました。「Nullable オブジェクトには値が必要です」と書かれています。私の見解では一線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 にはnull 合体演算子(2-argument If)と呼ばれるショートカットがあります。

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

If2 つの引数がある場合、null でない場合は最初の引数を返し、null の場合は 2 番目の引数を返します。

于 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 は、オブジェクトが null であることのチェックではなく、初期化されていない文字列変数のチェックと考えることができます。最大限のセキュリティのために、このようなものが必要だと思います。

 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 に答える