是否可以在Nhibernate QueryOver的连接部分中进行子选择?

时间:2016-10-25 15:23:00

标签: 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 
    D.MasterID = Master.ID 
    And Ma.Status = 42

这意味着:
不管有没有狗,都给我所有的情妇 给我所有有状态的大师 以及与所述大师和女主人相关的所有狗。

这可能只会导致情妇 但是,如果我们有一只狗,我们确信它的主人有身份。

连接中的子选择使我望而却步 我使用WithSubQuery的所有尝试都会将子选择添加到最终的Where子句中(而不是我想要的Join部分内)。

甚至可以使用NHibernate / QueryOver吗?

1 个答案:

答案 0 :(得分:2)

这应该是可能的。当我们执行var list = session .QueryOver<Job>() .JoinAlias(x => x.tags // relation , () => jobTag, // alias , JoinType.LeftOuterJoin // type , Subqueries.WhereProperty(() => jobTag.name).In(subquery) // here ) .List(); (JOIN语句)时,我们可以传递第4个参数,所谓的with子句。在这个Q&amp;答:

我们可以看到一个例子

ON

将第4个参数添加到AND cluase int grid = 20; long paths = 1; for (int i = 0; i < grid; i++) { paths *= (grid * 2) - (grid + i) paths /= (i + 1); } Console.WriteLine(paths); Console.ReadKey(); (它可能会限制更多现有关系条件)