2009-12-30 28 views
0

我有這個疑問我怎麼能修改此查詢得到我想要的東西 - 日曆日期

return plannerDb.IndividualCalendars.Where(u => 
    u.UserId == userId && 
    u.StartDate.Date >= startDate && 
    u.EndDate.Date <= endDate) 

所以基本上這個查詢確實是查找,從該月開始範圍內的所有日曆事件到那個月底。

然而,這沒有考慮像這樣的活動

Start Date: 12/26/2009 12:00:00 AM 
End Date: 1/8/2010 12:00:00 AM 

所以,今天是12月30日。我的日曆顯示從11月29日到1月8日。

因此,本次活動將在本月展示。然而下個月一月即將到來,它將在12月27日至2月6日期間展示。

現在自開始日期不在此範圍內,它將忽略此事件並不顯示它。

所以我需要一種方式來顯示這些事件,但同時只收集那些需要的。

我總是可以從用戶那裏得到每一個事件,但我認爲這太浪費了,因爲我將不得不循環並對其進行排序。

所以我只想要顯示的記錄。

所以,你可以看到我使用LINQ。

感謝

回答

1

如果我理解您的要求正確,你只需要重疊區間[startdate, endDate]事件。如果這是正確的,這會爲你做它:

plannerDb.IndividualCalendars.Where(
    u => u.UserId == userId && 
     (u.StartDate.Date < startDate && (
      (u.StartDate.Date >= startDate && u.StartDate.Date <= startDate) || 
      (u.EndDate.Date >= endDate && u.EndDate.Date <= endDate) || 
      (u.StartDate.Date <= startDate && u.EndDate.Date >= endDate) 
     ) 
); 

基本上,你只需要知道,如果u.StartDate.Date[startDate, endDate]u.EndDate.Date[startDate, endDate],或者如果間隔[u.StartDate.Date, u.EndDate.Date]包含[startDate, endDate]。也許一個更簡單的表達這種方式是:

plannerDb.IndividualCalendars.Where(
    u => u.UserId == userId && 
     !(u.StartDate.Date > endDate || u.EndDate.Date < startDate) 
); 

也就是說,事件不能endDate後啓動或startDate之前結束。等同於:

plannerDb.IndividualCalendars.Where(
    u => u.UserId == userId && 
     (u.StartDate.Date <= endDate && u.EndDate.Date >= startDate) 
); 

這最後一個版本是最清楚的。它說事件必須在endDate之前開始,並在startDate之後結束。

0

聽起來像是你只是想改變查詢了一下

return plannerDb.IndividualCalendars.Where(u => u.UserId == userId 
    && (
     (startDate <= u.StartDate.Date && endDate >= u.StartDate) // Is start date in range 
    || (startDate <= u.EndDate.Date && endDate >= u.EndDate) // Is end date in range 
    || (startDate > u.StartDate.Date && endDate < u.EndDate) // Is range within start/end 
    ) 
    ) 

我認爲,這將解決這個問題,除非我做了一個簡單的錯誤。

0

返回plannerDb.IndividualCalendars.Where(U => u.UserId ==用戶id & & u.StartDate.Date < =結束日期& &(u.StartDate.Date> =的startDate || u.EndDate.Date> = startDate)

相關問題