在我的应用程序中,用户可以委托另一个用户批准订单。
我需要验证的是,没有循环引用,因此如果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
它在 12 月创下纪录。
我搜索了日期范围重叠代码并尝试了所有方法,但似乎没有任何效果。
有任何想法吗?