2011-10-19 252 views
4

LINQクエリの2つの日付フィールドの間に入力日付範囲が入るレコードを返すselectクエリを作成しようとしています。LINQクエリで2つの日付間の日付範囲が一致する

私の入力は、次のとおりです。

  • 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)) 

私にも意味がないので、括弧を変更しました(1つが欠けているようです)

3

あなたの要件を100%クリアしているわけではありません。あなたのオープニングラインでは、 "入力日付範囲が2つの日付フィールドの間にあるレコード"を要求しましたが、 "追加"行では、予定の開始日が同じではないレコードを返すことを望まないあなたの入力の終了日。私はこれを2つの異なる要件にするため、2つの異なるクエリを提供します。

最初のクエリは、次のとおりです。

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

2番目のクエリは、次のとおりです。

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

最初のクエリは、入力日付「を含む」というレコードを返します。

2番目のクエリは、入力日付を「重複する」レコードを返します。

重複するクエリが必要であり、これが "14:00-15:00は15:00-16:00の値を返さない"という条件を満たすことが理にかなっていると思います。

お客様の要件を間違えて変更を加える必要がある場合は、お知らせください。

関連する問題