5

私のアプリケーションでは、ユーザーは別のユーザーに注文の承認を委任できます。

私が検証する必要があるのは、循環参照がないため、特定の期間にUser A委任された場合、その期間内のいつでも委任できない、つまり重複があることです (日付は):User BUser BUser Add/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 A12月に記録を更新中です。

日付範囲の重複するコードを検索し、すべてを試しましたが、何も機能していないようです。

何か案は?

4

1 に答える 1

2

単純にできません

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

オーバーラップチェックロジック: 2つの日付範囲がオーバーラップするかどうかを判断します

于 2012-09-27T13:15:32.543 に答える