簡體   English   中英

使用Linq在兩個日期之間重疊記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM