2009-06-08 6 views
0

私は質問が必要ですか? 私は2つのテーブル予約&単位を持っています。 テーブル予約には、ResId、rfrom(datetime)、rto(datetime)、status(int)、UnitID(外部キー)という列があります。 ステータス2は確認済みを意味します。 要求された期間にすべてのフリーユニットを取得する必要があります。クエリは、が確認されていないユニットのみを返す必要があります。予約(ステータス== 2) 私はエンティティフレームワークを使用していますので、eSQLクエリでなければなりません(他のオプションはストアドプロシージャを使用していますが、避けたい)。データベースはSQL Express 2005です。 また、クエリはテーブル単位の値に応じてフィルタリングする必要がありますが、問題はありません。 私はlinqでクエリの結果(multiple where文)を実行できます。無料宿泊施設を検索

編集: このクエリが動作している:


    select * from Units where 
    not exists (select * 
     from Reservations 
     where Reservations.unitID = Units.unitID 
     and Reservations.status = 2 
     and (@datefrom between Reservations.rfrom and Reservations.rto-1 
     or @dateto between Reservations.rfrom+1 and Reservations.rto 
     or rfrom between @datefrom and @dateto-1 
     or rto between @datefrom+1 and @dateto)) 
and [email protected]

エンティティSQLでどのように見えますか?私はlinqでそれを行うことができますか? エンティティ名は表と同じです。

答えて

0

私は最終的にストアドプロシージャを使用します...

0

select value u from AEDMEntities.Units as u WHERE 
not exists (select value r from AEDMEntities.Reservations as r 
where r.Unit.unitID = u.unitID and r.status = 2 AND 
(datetime '2009-7-7 00:00'between r.rfrom and r.rto 
or datetime '2009-7-7 00:00' between r.rfrom and r.rto 
or r.rfrom between datetime '2009-7-7 00:00'and datetime '2009-7-27 00:00' 
or r.rto between datetime '2009-7-7 00:00' and datetime '2009-7-27 00:00')) 
AND u.category=3 

これは機能しています。 **しかし、私はsqlのように日を減算/追加するために-1または+1を書くことはできません!**これを達成するには、パラメータ化する必要があります。ユニットは2つの派生クラスを持つ抽象クラスです&部屋(タイプごとのテーブルの継承)ので、メソッドの入力パラメータに応じてアプリや部屋だけを返す必要があります。

関連する問題