Peuplant objet de DataTable avec valeur par défaut lorsque DBNull
-
19-09-2019 - |
Question
Je suis peuplant l'objet client comme indiqué ci-dessous. Comment puis-je je code de façon concise quelque chose comme ce qui suit?
If IsDbNull(.Age) Then
.Age = 10
Else
.Age = dataRow("Age")
End If
Voici le contexte que je voudrais l'utiliser dans:
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
La solution
Dans l'espace de noms Microsoft.VisualBasic
il y a une fonction appelée IIF
. Il fonctionne en évaluant une expression et en retournant une valeur si l'expression est vraie et une autre si elle est fausse.
.Age = IIF(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
est disponible par défaut sans importer une importation Dans les nouvelles versions de Visual Studio (2008 ~), (IIF
était une fonction, la nouvelle If
est un opérateur):
.Age = If(dr("Age") = DBNull.Value, 10, dr("Age").ToString())
Si elle n'a pas été DBNull
, mais juste Nothing
, vous pouvez utiliser l'opérateur null-coalescent:
Dim val = If(objectThatMightBeNothing, DefaultValueToUse)
Voir MSDN pour plus de détails.
Autres conseils
Avez-vous essayé ceci:
.Age = IIf(dr("age") is DbNull, 10, dr("age"))
it helps.
Quelle valeur l'âge peut avoir si elle contient nulle
Je suggère d'utiliser Nullable (Of Integer) pour l'âge.
De plus, la comparer à DBNull.Value (qui est utilisé pour la comparaison dans le cas où le champ sous-jacent contient une valeur nulle).