How do I set a nullable DateTime to null in VB.NET?

后端 未结 5 1176
有刺的猬
有刺的猬 2020-12-10 11:58

I am trying to set up a date range filter on my UI, with checkboxes to say whether a DateTimePicker\'s value should be used, e.g.

Dim fromDate As DateTime? =         


        
相关标签:
5条回答
  • 2020-12-10 12:07
            squery = "insert into tblTest values('" & Me.txtCode.Text & "', @Date)"
            Dim cmd = New SqlCommand(squery, con)
    
            cmd.Parameters.Add("@Date", SqlDbType.DateTime)
            If txtRequireDate.Text = "" Then
                cmd.Parameters("@Date").Value = DBNull.Value
            Else
                cmd.Parameters("@Date").Value = txtRequireDate.Text
            End If
    
    0 讨论(0)
  • 2020-12-10 12:08

    The issue is that it's examining the right-hand side of this assignment first, and deciding that it is of type DateTime (no ?). Then performing the assignment.

    This will work:

    Dim fromDate As DateTime? = If(fromDatePicker.Checked, _
                                   fromDatePicker.Value, _
                                   CType(Nothing, DateTime?))
    

    Because it forces the right-hand side's type to be DateTime?.

    As I said in my comment, Nothing can be more akin to C#'s default(T) rather than null:

    Nothing represents the default value of a data type. The default value depends on whether the variable is of a value type or of a reference type.

    0 讨论(0)
  • 2020-12-10 12:10

    In addition to @Damien_The_Unbeliever's fine answer, using New DateTime? also works:

    Dim fromDate As DateTime? = If(fromDatePicker.Checked, _
                                   fromDatePicker.Value, _
                                   New DateTime?)
    

    You might find that it looks a bit counter intuitive, why perhaps the CType(Nothing, DateTime?) is preferable.

    0 讨论(0)
  • 2020-12-10 12:27

    Use New Date as a magic number:

    Dim fromDate As New Date
    If fromDatePicker.Checked Then
      fromDate = fromDatePicker.Value
    End If
    If fromDate <> New Date Then
      list = list.Where(Function(i) i.InvDate.Value >= fromDate.Value)
    End If
    
    0 讨论(0)
  • 2020-12-10 12:30

    With VB.NET and EF 6.X to save null is:

    Dim nullableData As New Nullable(Of Date)

    0 讨论(0)
提交回复
热议问题