2016-10-25 37 views
1

Я пытаюсь дублироватьВозможно ли иметь подзадачу в части соединения в Nhibernate QueryOver?

Select 
    ... 
From Mistress Mi 
Left Outer Join Dog D On Mi.ID = C.MistressID 
    And D.MasterID = 
     (Select Ma2.ID From Master Ma2 Where 
      D.MasterID = Ma2.ID 
      And Ma2.Status = 42) 
Left Outer Join Master Ma On 
    D.MasterID = Master.ID 
    And Ma.Status = 42 

Что это означает, что:
Дайте мне все Хозяйки независимо иметь собаку или нет.
Дайте мне все Владельцы, которые имеют статус
и все собаки, которые подключены к указанным мастерам и хозяйке.

Это может привести только к господам.
Но если у нас есть Собака, мы уверены, что у Учителя есть статус.

Это подзапрос в соединении, который ускользает от меня.
Все мои попытки с WithSubQuery приводят к подзаголовку, добавленному к заключительному предложению Where (а не внутри Присоединительной части, как я хочу).

Возможно ли это с помощью NHibernate/QueryOver?

ответ

1

Это должно быть возможно. Когда мы делаем JoinAlias(инструкция JOIN), мы можем передать 4-й параметр, так называемый с предложением. В этом Q & A:

Мы можем увидеть пример

var list = session 
    .QueryOver<Job>() 
    .JoinAlias(x => x.tags  // relation 
    ,() => jobTag,   // alias 
    , JoinType.LeftOuterJoin // type 
    , Subqueries.WhereProperty(() => jobTag.name).In(subquery) // here 
) 
    .List(); 

, что четвёртая параметра Я добавляют в ON cluase с AND(он может просто ограничить больше существующих условия отношений)