2011-10-19 92 views
4

我想写一个select查询返回记录,其中输入日期范围落在LINQ查询中的两个日期字段之间。日期范围落在一个LINQ查询中的两个日期之间

我的输入是:

  • DATE1 - 开始日期
  • 日期2 - 结束日期

我的数据库字段

  • AppointmentStart
  • AppointmentEnd

此外,我还希望确保14:00 - 15:00的输入在15:00-16:00之间不会返回值。

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

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

+0

你的陈述究竟是什么问题。在我看来很好。 – Icarus

回答

1

它回头看我。如果下列

为真:

日期1 =启动

日期2 =端

然后我将STARTDATE认为后或等于appointmentstart和结束日期之前或等于appointmentend或:

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

我也改变了parens,因为它们对我没有意义(看起来像是失踪)

3

我不是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的值”要求。

如果我理解了您的要求并需要进行任何更改,请告诉我。

相关问题