Поиск бесплатного жилья - PullRequest
0 голосов
/ 08 июня 2009

Мне нужна помощь с запросом? У меня есть 2 таблицы бронирования и единиц среди других. В таблице резервирования есть столбцы ResId, rfrom (дата / время), rto (дата / время), состояние (int), UnitID (внешний ключ). Статус 2 означает его подтвержденный. Мне нужно получить все свободные единицы за запрошенный период, запрос должен вернуть только те единицы, для которых не подтверждено резервирования (статус == 2) в запрошенный период (не существует) Я работаю с Entity Framework, так что это должен быть запрос eSQL (другой вариант использует хранимую процедуру, но я хочу избежать этого). База данных SQL Express 2005. Также запрос должен фильтровать единицы в зависимости от значений из табличных единиц, но это не проблема. Я могу сделать это с помощью linq по результатам запроса (несколько операторов 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 Units.category=@cat

Как бы выглядеть в сущности sql? Могу ли я сделать это с Linq? имена сущностей такие же, как таблицы.

Ответы [ 2 ]

0 голосов
/ 27 июня 2009

Я использую хранимые процедуры ...

0 голосов
/ 08 июня 2009
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

Это работает. Но я не могу написать -1 или +1, чтобы вычесть / сложить день, как в sql! Как этого добиться, мне просто нужно сделать его параметризованным. Модуль является абстрактным классом и имеет 2 производных класса app & rooms (таблица для каждого типа наследования), поэтому мне нужно возвращать только приложения или комнаты в зависимости от входного параметра метода, любые идеи приветствуются.

...