日期范围落在LINQ查询中的两个日期之间

时间:2011-10-19 00:15:48

标签: c# linq sql-server-2008

我正在尝试编写一个select查询,该查询返回输入日期范围介于LINQ查询中两个日期字段之间的记录。

我的输入是:

  • date1 - 开始日期
  • date2 - 结束日期

我的数据库字段是

  • AppointmentStart
  • AppointmentEnd

此外,我还想确保14:00-15:00的输入不会返回15:00-16:00的值。

return (from t1 in db.Appointments where (t1.AppointmentStart <= date2 && (t1.AppointmentEnd) >= date1)

如果有人可以帮助我,我会很感激。

2 个答案:

答案 0 :(得分:4)

我不是100%明确你的要求。在您的开头行中,您要求记录“输入日期范围介于两个日期字段之间”,但在“另外”行中,您暗示您不希望返回约会开始日期不相等的记录输入的结束日期。我认为这是两个不同的要求,所以我会给你两个不同的问题。

第一个查询是:

    from t1 in db.Appointments
    where date1 >= t1.AppointmentStart
    where date2 <= t1.AppointmentEnd
    select t1;

第二个查询是:

    from t1 in db.Appointments
    where date2 > t1.AppointmentStart
    where date1 < t1.AppointmentEnd
    select t1;

第一个查询返回“包含”输入日期的记录。

第二个查询返回“重叠”输入日期的记录。

我认为你想要重叠查询更有意义,这个会满足你的“14:00-15:00不会返回15:00-16:00的值”。

如果我在理解您的要求时出错,并且需要进行任何更改,请告诉我。

答案 1 :(得分:2)

它向后看我。

如果以下情况属实:

日期1 =开始

日期2 =结束

然后我会认为startdate等于或等于appointmentstart和enddate之前或等于assignmentend或者:

return (from t1 in db.Appointments where (date1 >= t1.AppointmentStart && date2 <= t1.AppointmentEnd))

我也改变了parens,因为它们对我没有意义(似乎缺少一个)