我有一个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
似乎没有值被分配到“天”。我已经检查过表格,并且在那里有有效的记录,所以我假设我的代码是错误的。道歉,如果这是模糊的,或者我没有提供足够的信息,我对此很新。
那么,什么是在'从是在dc.Bekos'你为什么要'ToArray的()'呢?为什么不'ToList()'?有了ToList,你可以通过返回bool的'Any()'方法检查它是否有任何内容。或者在做任何事情之前检查它是否是“Nothing”。 – Jeremy 2013-04-11 10:01:34
谢谢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
试着在这个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