是否可以在Nhibernate QueryOver的join部分中有子选择?

本文关键字:选择 join Nhibernate QueryOver 是否 | 更新日期: 2023-09-27 18:14:55

我正在尝试复制

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

这意味着:
给我所有的情妇,不管有没有养狗。
给我所有有Status的master
以及所有与上述主人和女主人有关的狗。

这可能导致只有情妇。
但如果我们有一只狗,我们肯定它的主人有地位。

连接中的子选择使我无法执行。
我对WithSubQuery的所有尝试结果都是在子选择中添加到最后的Where子句(而不是在我想要的Join部分内)。

它甚至可能与NHibernate/QueryOver?

是否可以在Nhibernate QueryOver的join部分中有子选择?

这应该是可能的。当我们执行JoinAlias (JOIN语句)时,我们可以传递第四个参数,即所谓的with子句。在这个问题中;答:

  • NHibernate QueryOver with leftjoins

我们可以看到一个例子

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

第4个参数加入AND ON clase(它可以更多地限制现有的关系条件)