У меня есть несколько записей в базе данных с начальной и конечной датами
09/15/2011 - 09/30/2011
10/15/2011 - 10/22/2011
11/01/2011 - 11/15/2011
Когда пользователь сохраняет запись, мне нужно убедиться, что даты не перекрываются.
Мой простой код проверяет диапазоны дат в конкретной записи (например, пользователь вводит 16.09.2011 или 21.10.2011, я выбрасываю исключение.)
Но при малой вероятности, что пользователь проявит творческий подход (например, 14.10.2011 - 23.10.2011 или даже 14.10.2011 - 16.11.2011), теперь они обошли мой чек.
Кстати, пользователь может ввести с 14.10.2011 по 23.10.2011, если он редактировал запись, содержащую значения 15.10.2011 - 22.10.2011.
Итак, я пытаюсь разгадать эту загадку с помощью запроса linq. Однако то, что у меня есть, работает не совсем правильно.
ОБНОВЛЕНИЕ Не берите в голову, что код не работает. Пытаясь привести пример для расширения отклика Миики, я нашел свой ответ. Итак, отдавая должное Miika за указание правильного направления и размещение моего рабочего кода ниже:
Вот мой код:
Private Sub CheckForOverlap(myMonth As Messages.MyMonth)
Dim am As New MyMonth()
Dim amCollection As Messages.MyMonthCollection
Dim overlappingMyMonthDate As Boolean = False
Dim sErrorMsg As String = ""
'...non-applicable code omitted
Dim query = From s In amCollection _
Let s1 As MyMonth = CType(s, MyMonth) _
Where s1.AttendanceMonthID <> attendanceMonth.AttendanceMonthID And _
(CDate(attendanceMonth.StartDate) < CDate(s1.StartDate) And CDate(attendanceMonth.EndDate) > CDate(s1.EndDate)) _
Select s1
If query.Count > 0 Then
sErrorMsg = "Dates entered surround another entry"
End If
If overlappingMyMonthDate Then
Throw New Exception(sErrorMsg)
End If
End Sub
End Class
Все это произошло по запросу LINQ.