[英]Overlapping records between two dates using Linq
在我的應用程序中,一個用戶可以委派另一個用戶來批准訂單。
我需要驗證的是,沒有循環引用,因此,如果在一定時期內向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
的代表? 它在十二月刷新紀錄。
我已經搜索了日期范圍重疊的代碼,並嘗試了一切,但似乎沒有任何效果。
有任何想法嗎?
你不能簡單地做
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
重疊檢查邏輯: 確定兩個日期范圍是否重疊
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.