使用Linq在两个日期之间重叠记录

在我的应用程序中,用户可以委派另一个用户批准订单。

我需要validation的是,没有循环引用,因此如果User A在一定时间内委派了User B ,则User B不能在该时间段内的任何时间委托User A ,即存在重叠( dd/mm/yyyy日期) 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() .Where(x => x.DateFrom > DateTime.Now && delegateOrderApproval.DelegatedUser.UserId == x.DelegatorUser.UserId) .And(x => x.DateFrom >= delegateOrderApproval.DateFrom && delegateOrderApproval.DateTo = delegateOrderApproval.DateFrom && x.DateTo <= delegateOrderApproval.DateTo) || (x.DateFrom = delegateOrderApproval.DateFrom) || (x.DateFrom = delegateOrderApproval.DateTo)) .List(); 

如果我尝试添加以下记录:

 Delegator: User B Delegated To: User A Date From: 15/11/2012 DateTo: 21/11/2012 

应该没有冲突,因为User B在该时间段内不是User A的代表? 它在12月份创下纪录。

我搜索了日期范围重叠代码并尝试了一切,但似乎没有任何工作。

有任何想法吗?

你不能简单地做

 var doesOverlapExist = Session.QueryOver() .Any(x => x.DateFrom > DateTime.Now && delegateOrderApproval.DelegatedUser.UserId == x.DelegatorUser.UserId && x.DateFrom <= delegateOrderApproval.DateTo && x.DateTo >= delegateOrderApproval.DateFrom); 

或者如果你没有,请替换为

 Where(x=> blabla).Count() >0 

重叠检查逻辑: 确定两个日期范围是否重叠