VB - System.NullReferenceException - 带有日期戳的LINQ to SQL

时间:2013-04-11 09:55:32

标签: asp.net .net vb.net linq-to-sql visual-studio-2012

我有一个带有表(Beko)的SQL DB,其中每个记录包含创建日期的日期戳(数据类型日期)。我正在尝试填充日历控件(calBeko),以便突出显示存在记录的每一天。

我在页面类中声明了以下内容以保存包含记录的日期

Private days As IEnumerable(Of DateTime) = Nothing

然后我在Page_PreRender事件中使用以下内容来创建包含记录的日期和数组:

Dim startDate, endDate, baseDate As DateTime

    If calBeko.VisibleDate.Year <> 1 Then
        baseDate = calBeko.VisibleDate
    Else
        baseDate = DateTime.Now
    End If

    startDate = New DateTime(baseDate.Year, baseDate.Month, 1)
    endDate = startDate.AddMonths(1).AddDays(-1)

    Dim dc As New BekoDataContext
    Dim days = (From Beko In dc.Bekos _
               Where Beko.DateStamp <= endDate And _
               Beko.DateStamp >= startDate _
               Order By Beko.DateStamp _
               Select New DateTime(Beko.DateStamp.Year, _
                                   Beko.DateStamp.Month, _
                                   Beko.DateStamp.Day) Distinct).ToArray()

然后我使用calBeko_DayRender事件突出显示记录存在的日期:

For Each d In days
        If d.Day = e.Day.Date.Day AndAlso _
            d.Month = e.Day.Date.Month Then
            e.Cell.CssClass = "ajax_calendar_checkday"
            Exit For
        End If
    Next

问题是当我运行页面时,我在以下行获得了System.NullReferenceException:

For Each d In days

似乎没有为'days'分配任何值。我检查了表格,那里有有效的记录,所以我认为我的代码是错误的。如果这很模糊或者我没有提供足够的信息,我很抱歉,我对此很新。

1 个答案:

答案 0 :(得分:1)

您正在代码

中创建新的本地变量days
Dim days = (From Beko In dc.Bekos _

而不是将查询结果分配给类变量days。因此,Nothing方法中的天为calBeko_DayRender,您将获得例外。

您的代码应为

days = (From Beko In dc.Bekos _
               Where Beko.DateStamp <= endDate And _
               Beko.DateStamp >= startDate _
               Order By Beko.DateStamp _
               Select New DateTime(Beko.DateStamp.Year, _
                                   Beko.DateStamp.Month, _
                                   Beko.DateStamp.Day) Distinct).ToArray()