2013-04-11 41 views
1

我有一个SQL DB与表(Beko),其中每个记录包含日期戳(数据类型日期)为其创建日期。我试图填充日历控件(calBeko),以便突出显示存在记录的每一天。VB - System.NullReferenceException - LINQ to SQL与日期戳

我宣布我的页面类下面来保存包含记录中的天

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 

似乎没有值被分配到“天”。我已经检查过表格,并且在那里有有效的记录,所以我假设我的代码是错误的。道歉,如果这是模糊的,或者我没有提供足够的信息,我对此很新。

+0

那么,什么是在'从是在dc.Bekos'你为什么要'ToArray的()'呢?为什么不'ToList()'?有了ToList,你可以通过返回bool的'Any()'方法检查它是否有任何内容。或者在做任何事情之前检查它是否是“Nothing”。 – Jeremy 2013-04-11 10:01:34

+0

谢谢Jeremy的回复,我注意到'从dc.Bekos'是错误的,它应该是'从beko在dc.Bekos'。 Beko是我Beko.dbml中的一个Bekos。我将'be'改为'Beko',但我仍然没有将价值分配给'天'。我将相应地编辑我的文章,因为我有LINQ to SQL语句在其他页面上使用'Beko in dc.Bekos'正确工作 – Jimsan 2013-04-11 11:05:11

+0

试着在这个Dim间设置一个断点Dim dsList =(From b In dc.Bekos where b.dateStamp <= endDate和_b.DateStamp> = startDate _select b).ToList()'看看列表里面有什么'' – Jeremy 2013-04-11 11:13:05

回答

1

你在你的代码中创建一个新的局部变量days

Dim days = (From Beko In dc.Bekos _ 

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

你的代码应该是

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() 
+0

棒极了,作品一种享受。这也是一个基本的错误。非常感谢你 – Jimsan 2013-04-11 11:41:36