【发布时间】:2012-09-19 06:02:53
【问题描述】:
在我的应用程序中,用户可以委托其他用户批准订单。
我需要验证的是,没有循环引用,所以如果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 月创下纪录。
我搜索了日期范围重叠代码并尝试了所有方法,但似乎没有任何效果。
有什么想法吗?
【问题讨论】:
-
我猜你正在使用 NHibernate 的 QueryOver,你的检查应该在数据库级别运行吗?如果是,我认为您应该使用一些与 NHibernate 相关的标签来标记问题,因为这可能会影响您执行此操作的方式。