在我的应用程序中,用户可以委托另一个用户批准订单。
我需要验证的是,没有循环引用,所以如果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 月份创下了纪录。
我已经搜索了日期范围重叠代码并尝试了所有方法,但似乎没有任何效果。
有任何想法吗?
你不能简单地做
var doesOverlapExist = Session.QueryOver<DelegateOrderApproval>()
.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
重叠检查逻辑:确定两个日期范围是否重叠
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)