数据查询范围linq c#
我在我的网站上有一个日历,用户可以创建一天或多天的活动。
因此,在我的Calendar
表中,我设置了两个字段Start
(日期时间)和End
(日期时间)。
我想要执行具有特定日期范围的查询,如从08/01/2017
到08/31/2017
。
现在,我该如何处理这个范围内的所有事件?
我不得不采取:
数据查询范围linq c#
- ,在此范围内的范围,年底前启动事件开始在这个范围内和之前或区域结束之后结束,
- 活动,
- 事件开始之前,该范围但毕竟这范围
到底是有可能做一个查询或我必须做三个不同的查询?
我希望我解释自己,否则问我...
我想说这应该足以测试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
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);
这是足够的?
@RenéVogt:真的,现在:) –
它虽然工作,但@Fildor方法更简单。不管怎么说,还是要谢谢你! – Broge
你的要求可以归结为以下事实:
- 该事件的范围和
- 该事件的范围 开始后 结束结束前 开始
(“和”很重要,否则完全超出范围的事件也会匹配)。
所以,这应该工作:
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);
您首先得到正确的答案......谢谢! – Broge
@勒内·沃格特:未覆盖的第三个要求。 –
我会说它应该足够测试'event.End> range.Start && event.Start
Fildor
是的,我必须显示第三个事件,因为它经历了范围。 – Broge