デフォルト値のDataTableからオブジェクトを移入する場合はDBNull
-
19-09-2019 - |
質問
以下に示すように、
私は、顧客オブジェクトを移入しています。どのように私は簡潔に次のようなものをコーディングでしょうか?
If IsDbNull(.Age) Then
.Age = 10
Else
.Age = dataRow("Age")
End If
ここで私はそれを使用したい文脈です
Public Shared Function Retrieve() As List(Of Customer)
Dim dt As DataTable = Dac.ExecuteDataTable("CustomerRetrieveAll", Nothing)
Dim customerList As New List(Of Customer)
For Each dr As DataRow In dt.Rows
customerList.Add(New Customer {
.CustomerId = CType(dr("CustomerID"), Integer),
.LastName = dr("LastName").ToString,
.Age = dr("Age").ToString,
.FirstName = dr("FirstName").ToString})
Next
Return customerList
End Function
解決
Microsoft.VisualBasic
名前空間内IIF
と呼ばれる機能があります。これは、式を評価し、falseの場合式が真と別である場合は、1つの値を返すことによって動作します。
だから、
.Age = IIF(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
のVisual Studio(2008年〜)の新しいバージョンでは、これは輸入せずにデフォルトでインポート可能です(IIF
が機能し、新しいIf
は演算子です):
.Age = If(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
それは、ちょうどDBNull
をNothing
ていなかった場合は、nullで合体演算子を使用することができます:
Dim val = If(objectThatMightBeNothing, DefaultValueToUse)
詳細については、 MSDN を参照してください。
他のヒント
あなたはこれを試してみました:?
.Age = IIf(dr("age") is DbNull, 10, dr("age"))
それがお役に立てば幸いです。
年齢はそれがヌル含まれている場合はどのような価値を持つことができますか?
私は年齢のために(整数)のNullableを使用することをお勧めします。
また、(基本となるフィールドがヌル値を含む場合には比較のために使用される)DBNull.Valueのに対してそれを比較します。
所属していません StackOverflow