我正在尝试检查我的Events
表中每个事件的DateTime重叠。我编写的代码允许用户输入Module_code
。根据{{1}}表中的条目检查此Module_code
。如果任何事件的Events
或Start_Date_Time
与表格中任何其他事件的End_Date_Time
或Start_Date_Time
重叠,则仅针对该模块,那么我想将将事件行放入数组列表中,然后使用结果填充gridview。我有以下代码,我认为这些代码实现了我的大部分目标。但是当我运行gridview时,它没有数据。调试显示没有任何内容发送给它。我认为这是一个问题,我试图将我的值传递给arrayList。
End_Date_Time
EDIT..Code已更改为
'return all relevant tables from the Modules database, based on the module code entered by the user.
Dim eventTime = (From mods In db.Modules
Join evnt In db.Events On mods.Module_code Equals evnt.Module_code
Join rm In db.Rooms On rm.Room_ID Equals evnt.Room_ID
Join build In db.Buildings On build.Building_code Equals rm.Building_code
Where ((mods.Module_code = initialModCode) And (evnt.Room_ID = rm.Room_ID))
Select evnt.Event_ID, evnt.Module_code, evnt.Event_type, evnt.Start_Date_Time, evnt.End_Date_Time, build.Building_code, rm.Room_Number)
Dim listClashes As New ArrayList()
For i As Integer = 0 To eventTime.Count - 1
For j As Integer = i + 1 To eventTime.Count - 1
If (eventTime.ToList(i).Start_Date_Time < eventTime.ToList(j).End_Date_Time) And (eventTime.ToList(i).End_Date_Time > eventTime.ToList(j).Start_Date_Time) Then
'MsgBox("Clash", MsgBoxStyle.MsgBoxSetForeground, "")
listClashes.Add(eventTime)
Else
'MsgBox("No Clash", MsgBoxStyle.MsgBoxSetForeground, "")
End If
Next
Next
gdvClashes.DataSource = listClashes
gdvClashes.DataBind()
此修改无效。如果 If (eventTime(i).Start_Date_Time <= eventTime(j).End_Date_Time) And (eventTime(i).End_Date_Time >= eventTime(j).Start_Date_Time) Then
'MsgBox("Clash", MsgBoxStyle.MsgBoxSetForeground, "")
listClashes.Add(eventTime.ToList)
Else
我在这里完全错误的方向,我会抛出一个例外吗?
EDIT ..
新代码建议
The query operator 'ElementAtOrDefault' is not supported.
这应该包含在for循环中还是引用arrayList或什么?
答案 0 :(得分:0)
您的嵌套循环只会令人困惑。您可以在一个查询中执行所有操作:
Dim listClashes =
From e1 in eventTime
From e2 in eventTime
Where e2.Start_Date > e1.Start_Date && e2.Start_Date < e1.End_Date
Select (...)
这是:您发现的事件的开始日期介于其他事件的startdate和enddate之间。
由于eventTime
是IQueryable
,整个语句listClashes
被转换为一个SQL查询,最后数据库引擎完成所有艰苦的工作,而您的客户端代码只接收结果