Перекрывающиеся записи между двумя датами с использованием Linq
В моем приложении пользователь может поручить другому пользователю утверждать заказы.
Что мне нужно проверить, так это отсутствие циклических ссылок, так что еслиUser A
делегированUser B
в течение определенного периода,User B
не может делегироватьUser A
за любое время в течение этого периода, т.е.dd/mm/yyyy
):
Delegator Delegated To DateFrom DateTo
User A User B 01/11/2012 08/11/2012
User A User B 16/12/2012 24/12/2012
Это код, который я должен проверить на совпадения:
var overlaps = .Session.QueryOver<DelegateOrderApproval>()
.Where(x => x.DateFrom > DateTime.Now && delegateOrderApproval.DelegatedUser.UserId == x.DelegatorUser.UserId)
.And(x => x.DateFrom >= delegateOrderApproval.DateFrom && delegateOrderApproval.DateTo <= x.DateTo
|| (x.DateFrom >= delegateOrderApproval.DateFrom && x.DateTo <= delegateOrderApproval.DateTo)
|| (x.DateFrom <= delegateOrderApproval.DateFrom && x.DateTo >= delegateOrderApproval.DateFrom)
|| (x.DateFrom <= delegateOrderApproval.DateFrom && x.DateTo >= delegateOrderApproval.DateTo))
.List();
Если я попытаюсь добавить следующую запись:
Delegator: User B
Delegated To: User A
Date From: 15/11/2012
DateTo: 21/11/2012
не должно быть никакого конфликта, посколькуUser B
не является делегатомUser A
в этот период времени? Он забирает запись в декабре.
Я искал код, перекрывающий диапазон дат, и перепробовал все, но, похоже, ничего не работает.
Есть идеи?