【问题标题】:Is it possible to have a subselect in the join part in Nhibernate QueryOver?是否可以在 Nhibernate QueryOver 的连接部分中进行子选择?
【发布时间】:2017-03-07 17:31:20
【问题描述】:

我正在尝试复制

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 子句中(而不是我想要的 Join 部分)。

NHibernate/QueryOver 甚至可以吗?

【问题讨论】:

    标签: c# sql nhibernate queryover


    【解决方案1】:

    这应该是可能的。当我们执行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();
    

    将第四个参数添加到ON cluase 和AND (它可能只是限制更多现有的关系条件)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      相关资源
      最近更新 更多