获取提供的开始日期和结束日期范围内的日期

时间:2019-10-02 11:40:26

标签: sql-server vb.net linq-to-sql

我在数据库中有开始日期和结束日期的记录 我想过滤出所有在开始和结束日期范围内的记录

我有两个有效的查询,为我提供了两个日期之间的记录,另一个查询为我提供了开始日期或结束日期范围内的记录

我如何将这两个linq查询合并为一个查询,以便它以两种方式工作

Linq 1

schedulelist = (From c In db.Table1 Where c.StartDate.Value.Date <= objStartDate.Date And c.EndDate.Value.Date >= objStartDate.Date And
c.UserID = CInt(Session("UserID"))).ToList()

Linq 2

schedulelist = (From c In db.Table1 Where (c.StartDate.Value.Date >=
objStartDate.Date And c.StartDate.Value.Date <= objEndDate.Date) Or
(c.EndDate.Value.Date >= objStartDate.Date And c.EndDate.Value.Date <=
objEndDate.Date) And c.UserID = CInt(Session("UserID"))).ToList()

db表中的这些值

StartDate                EndDate  
2019-10-08 07:00:00.000  2019-10-30 07:00:00.000
2019-10-15 07:00:00.000  2019-10-27 07:00:00.000

如果使用ObjStartDate 15/10/2019 00:00:00和ObjEndDate 27/10/2019 00:00:00进行搜索

当我运行Linq 2时,我获得了第二记录

我运行Linq 1时获得记录1

我应该得到的是任何Linq 1或Linq 2的两条记录

那么将两个查询合并到一个查询中还是更好的解决方案是什么呢?

1 个答案:

答案 0 :(得分:0)

检查日期范围1是否与日期范围2相交的最简单的查询是这样的:

... WHERE range2_end > range1_start
      AND range1_end > range2_start

这会检查所有情况,例如范围1完全在范围内,完全包含,在范围2内开始或在范围2内结束。