数据linq c#的查询范围

Query range of data linq c#

我的网站上有日历,用户可以创建一天或多天的活动。
因此,在我的 <b>Calendar</b> table 中,我设置了两个字段 Start(Datetime) 和 End(Datetime ).

我想查询特定日期范围的查询,例如从 08/01/201708/31/2017
现在,我如何获取此范围内的所有事件?

我必须服用:


是否可以进行单个查询,或者我必须进行三个不同的查询?

我希望我解释了自己,否则问我...

DateTime startRange = new DateTime(2017, 08, 01);
DateTime endRange   = new DateTime(2017, 08, 32);

var events = db.Events
   .Where(e => e.Start >= startRange && startRange <= e.End && e.End >= endRange
            || e.Start <= startRange && e.End >= endRange
            || e.Start <= startRange && endRange >= e.Start && e.End <= endRange);

这够了吗?

您的要求可以归结为以下事实:

  • 事件
  • 范围的结束之前开始
  • 事件在范围
  • 开始后结束

("and"很重要,否则完全超出范围的事件也会匹配)。

所以,这应该有效:

DateTime startRange = new DateTime(2017, 08, 01);
DateTime endRange   = new DateTime(2017, 08, 32);

var events = db.Events.Where(e => e.Start <= rangeEnd && e.End >= rangeStart);

我会说它应该足以测试 event.End >= range.Start && event.Start <= range.End

       0 1 2 3 4 5 6 7 8 9
Range        |-----|
Evt1   |-|                   evt.End < range.Start => false
Evt2                 |-|     evt.Start > range.End => false
Evt3     |-----------|       => true
Evt4     |-------|           => true
Evt5             |-----|     => true
Evt6           |-|           => true