是否可以在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?
这应该是可能的。当我们执行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(它可以更多地限制现有的关系条件)