我正在编写一个时间表代码。我正在使用与这些模块相关的大学模块和事件系统,即
模块 CSC3039 Event1 - Lecture Event2 - Lecture Event3 - Practical 等
我需要检查模块中每个事件的时间并比较冲突。冲突不需要纠正,只需突出显示即可。我将使用的表Events
包含Event_ID (PK), Module_code (FK), Start_Date_Time, End_Date_Time
其他无关紧要的字段。我发现我需要实现一个For Each
语句,最终导致一个 if 语句,例如:
if (startTime1 <= endTime2 或 endTime1 >= startTime2) 冲突
我的问题是试图在这里找出实际的 for 循环。我不知道该写什么来声明我的开始时间和结束时间。我认为这是获取 event1 并获取其开始和结束然后检查事件 2、3 或 4 是否符合上述 if 语句的情况。我正在努力做到这一点,但真的可以使用一些指导。
编辑...根据以下建议,我实现了以下代码:
'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)
'use the gridview to display the result returned by the above query
gdvEventsTable.DataSource = eventTime
gdvEventsTable.DataBind()
Dim listClashes As New List(Of Array)
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
尝试将事件添加到我的数组列表时,我注意到在调试中没有事件发送到列表。