C# 是否可以在Nhibernate QueryOver的联接部分中有一个子选择?

C# 是否可以在Nhibernate QueryOver的联接部分中有一个子选择?,c#,sql,nhibernate,queryover,C#,Sql,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

我正在努力复制

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
进行的所有尝试都会将subselect添加到最终的Where子句中(而不是像我所希望的那样添加到连接部分中)


使用NHibernate/QueryOver是否可能?这应该是可能的。当我们执行
JoinAlias
(JOIN语句)时,我们可以传递第四个参数,即所谓的with子句。在本问答中:

我们可以看到一个例子

var list = session
  .QueryOver<Job>()
  .JoinAlias(x => x.tags      // relation
     , () => jobTag,          // alias
     , JoinType.LeftOuterJoin // type
     , Subqueries.WhereProperty(() => jobTag.name).In(subquery) // here
  )
  .List();
var list=会话
.QueryOver()
.JoinAlias(x=>x.tags//relation
,()=>作业标签,//别名
,JoinType.LeftOuterJoin//type
,子查询.WhereProperty(()=>jobTag.name).In(子查询)//此处
)
.List();
第四个参数被添加到上的
中,并带有
(它可能会限制更多现有的关系条件)