2009-12-30 32 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)

相关问题