19

DateTimePicker の値を使用する必要があるかどうかを示すチェックボックスを使用して、UI に日付範囲フィルターを設定しようとしています。

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

しかし、 をに設定しても '12:00:00 AM' に設定されるわけではなく、 is not であるため、次のfromDateステートメントNothingはフィルターを誤って実行します。NothingIfstartDateNothing

If (Not startDate Is Nothing) Then
    list = list.Where(Function(i) i.InvDate.Value >= startDate.Value)
End If

startDateの値を確実に取得するにはどうすればよいNothingですか?

4

5 に答える 5

30

問題は、最初にこの代入の右側を調べて、型DateTime(no ?) であると判断していることです。次に、割り当てを実行します。

これはうまくいきます:

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

右側の型を強制的に にするためDateTime?です。

コメントで述べたように、以下よりもNothingC# に似ている可能性があります。default(T)null

Nothingデータ型のデフォルト値を表します。デフォルト値は、変数が値型か参照型かによって異なります。

于 2012-09-26T06:38:17.937 に答える
2

@ Damien_The_Unbelieverの素晴らしい答えに加えて、次の使用New DateTime?も機能します。

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

少し直感に反しているように見えるかもしれませんが、おそらくCType(Nothing, DateTime?)が望ましい理由です。

于 2014-01-30T23:00:38.497 に答える
0

New Dateマジックナンバーとして使用:

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
于 2012-09-26T06:42:04.070 に答える
0
        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
于 2013-12-16T05:21:45.993 に答える