문제

아래와 같이 고객 객체를 채우고 있습니다. 다음과 같은 것을 어떻게 간결하게 코딩합니까?

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. 표현식을 평가하고 표현식이 참이면 하나의 값을 반환하고 다른 값이 거짓 인 경우 작동합니다.

그래서

.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-coalescing 연산자를 사용할 수 있습니다 :

Dim val = If(objectThatMightBeNothing, DefaultValueToUse)

보다 MSDN 자세한 내용은.

다른 팁

이것을 시도 했습니까? :

.Age = IIf(dr("age") is DbNull, 10, dr("age"))

도움이되기를 바랍니다.

널을 함유하면 나이가 가질 수있는 가치는 무엇입니까?
나이에 nullable (정수)을 사용하는 것이 좋습니다.

또한 dbnull.Value와 비교하십시오 (기본 필드에 널 값이 포함 된 경우 비교에 사용됨).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top