2015-05-18 16 views
1

我有一個包含這些列的數據庫重疊:如何檢查是否date_start1和date_end1與date_start2和date_end2使用LINQ

event_start, event_end. 

我如何檢查是否startend與event_start和event_end存儲在數據庫中重疊。這裏是我的代碼,我現在使用:

public static bool IsAvailable(DateTime, start, DateTime, end) 
{ 
    var query = from evnt in dbContext.events 
       select evnt; 
    foreach (var q in query) 
    { 
     if (start < q.event_end || end > q.event_start) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

回答

2

這是不夠的起始日期是活動的結束日期前 - 結束日期必須是在活動的開始日期過於之後。將||替換爲&&

此外,您還可以替換一個呼叫環路Any()

return !dbContext.events.Any(q => start < q.event_end && end > q.event_start); 
+0

邏輯上不正確的。 – Maarten

+0

謝謝@Maarten。 –

1

添加在哪裏查詢。

var data = dbContext.Events 
    .Where(q => !(start < q.event_end || end > q.event_start)) 
    .ToList(); 
1

您可以使用此查詢來檢查是否有任何記錄與特定日期範圍發生衝突。

var query = (from evnt in dbContext.events 
      where evnt.event_end >= start 
      || evnt.event_start <= end 
      select evnt).FirstOrDefault(); 

if(query != null){ 
    //it is overlap 
} 

如果此查詢找到的任何記錄,則您的給定日期至少一個事件重疊。

編輯evnt.event_start >= end改爲<=evnt.event_end <= start>=

+0

我試過這個返回查詢== null。但它總是返回false。 –

+0

@ErrolPaleracio –

相關問題