0

クエリについてサポートが必要ですか?私は2つのテーブルの予約とユニットを持っています。テーブル予約には、ResId、rfrom(datetime)、rto(datetime)、status(int)、UnitID(外部キー)の列があります。ステータス2は確認済みを意味します。要求された期間にすべての空きユニットを取得する必要があります。クエリは、要求された期間(存在しない)に予約が確認されていない(ステータス== 2)ユニットのみを返す必要があります。私はエンティティフレームワークを使用しているので、eSQLクエリである必要があります(他のオプションはストアドプロシージャを使用していますが、それを避けたいです)。データベースはsqlexpress2005です。また、クエリはテーブルユニットの値に応じてユニットをフィルタリングする必要がありますが、それは問題ではありません。クエリの結果(複数のwhereステートメント)でlinqを使用してこれを行うことができます。

編集: このクエリは機能しています:


    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 Units.category=@cat

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

4

2 に答える 2

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つの派生クラスapp&rooms(タイプ継承ごとのテーブル)があるため、メソッド入力パラメーターに応じて、アプリまたはルームのみを返す必要があります。

于 2009-06-08T18:17:59.787 に答える
0

ストアドプロシージャを使用することになります...

于 2009-06-27T13:52:29.680 に答える