2009-06-08 2 views
0

Мне нужна помощь с запросом? У меня есть 2 заказаных таблиц & единиц среди других. Резервирование таблиц имеет столбцы ResId, rfrom (datetime), rto (datetime), status (int), UnitID (внешний ключ). Статус 2 означает его подтверждение. Мне нужно получить все свободные единицы в запрошенный период, запрос должен вернуть только те единицы, для которых не подтверждены оговорки (статус == 2) в запрошенный период (не существует). Я работаю с инфраструктурой сущности, поэтому он должен быть запросом 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 [email protected]

Как будет выглядеть в Entity 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 

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