У меня есть следующие запросы:
Model.RampActiveHour rah = null;
var defaultWeekQuery = QueryOver.Of<Model.RampAdditionalDefaultWeek>()
.Where(adw => adw.Ramp == rah.Ramp &&
adw.Active && adw.FromDate <= date &&
adw.ToDate >= date)
.Select(adw => adw.ID).Take(1);
var result = session.QueryOver(() => rah)
.Where(ah => ah.DayOfWeek == date.DayOfWeek)
.WhereRestrictionOn(ah => ah.Ramp).IsIn((ICollection) ramps)
.WithSubquery.WhereProperty(ah=>ah.AdditionalDefaultWeek)
.Eq(defaultWeekQuery)
.List();
Результат запроса:
SELECT
this_.ID as ID3_0_,
this_.DayOfWeek as DayOfWeek3_0_,
this_.Active as Active3_0_,
this_.SlotsCount as SlotsCount3_0_,
this_.SlotId as SlotId3_0_,
this_.SlotLength as SlotLength3_0_,
this_.Date as Date3_0_,
this_.ramp_id as ramp8_3_0_,
this_.additional_default_week_id as additional9_3_0_,
this_.Previous as Previous3_0_,
this_.Next as Next3_0_
FROM RampActiveHour this_
WHERE this_.DayOfWeek = 3 /* ?p0 */ and
this_.ramp_id in (
3484 /* ?p1 */,
3498 /* ?p2 */)
and
this_.additional_default_week_id = (
SELECT
this_0_.ID as y0_
FROM RampAdditionalDefaultWeek this_0_
WHERE (
(
(
this_0_.ramp_id = this_.ramp_id and
this_0_.Active = 1 /* ?p103 */)
and
this_0_.FromDate <= '2011-07-20T00:00:00.00' /* ?p104 */)
and
this_0_.ToDate >= '2011-07-20T00:00:00.00' /* ?p105 */)
limit 1 /* ?p106 */)
Запрос правильный.Проблема состоит в том, что в моей модели у меня есть свойство в RampActiveHour, называемое AdditionalDefaultWeek, и это свойство отображается в таблицу RampAdditionalDefaultWeek со многими в один.Это отношение многие к одному может быть нулевым (что означает, что дополнительная неделя по умолчанию отсутствует) или может быть установлено в int (что означает, что активная дополнительная неделя по умолчанию активна).
Проблема заключается в том, что при наличииno active AdditionalDefaultWeek подзапрос не возвращает пустое множество, и по этой причине весь запрос возвращает пустое множество.
Я думал о проекциях. Условные проекции, но все же могу это сделать.
Любая помощьочень признателен.
Спасибо.