数据linq c#的查询范围
Query range of data linq c#
我的网站上有日历,用户可以创建一天或多天的活动。
因此,在我的 <b>Calendar</b>
table 中,我设置了两个字段 Start
(Datetime) 和 End
(Datetime ).
我想查询特定日期范围的查询,例如从 08/01/2017
到 08/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
我的网站上有日历,用户可以创建一天或多天的活动。
因此,在我的 <b>Calendar</b>
table 中,我设置了两个字段 Start
(Datetime) 和 End
(Datetime ).
我想查询特定日期范围的查询,例如从 08/01/2017
到 08/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