NHibernate QueryOver连接多个表的语法

ili*_*rit 2 nhibernate join queryover

如何使用QueryOver重写此SQL?我不确定QueryOver的连接优先级和解决方案是如何工作的.

SELECT DISTINCT T1.*
FROM T1
LEFT JOIN T2
   JOIN T3
   ON T2.T3Key = T3.PrimaryKey
ON T1.PrimaryKey = T2.T1Key
LEFT JOIN T4
   JOIN T5
   ON T4.T5Key = T5.PrimaryKey
ON T1.PrimaryKey = T4.T1Key
WHERE T3.Criteria = @Criteria
OR T5.Criteria = @Criteria
Run Code Online (Sandbox Code Playgroud)

http://www.sqlfiddle.com/#!3/affd13/5

dot*_*joe 5

假设您已设置所有关系,则需要设置要在QueryOver中使用的别名变量...

T2 t2Alias = null;
T3 t3Alias = null;
T4 t4Alias = null;
T5 t5Alias = null;

int criteria = 1;

var results = Session.QueryOver<T1>()
    .Left.JoinAlias(x => x.T2, () => t2Alias)
    .Left.JoinAlias(() => t2Alias.T3, () => t3Alias)
    .Left.JoinAlias(x => x.T4, () => t4Alias)
    .Left.JoinAlias(() => t4Alias.T5, () => t5Alias)
    .Where(Restrictions.Disjunction()
        .Add(Restrictions.Where(() => t3Alias.Criteria == criteria))
        .Add(Restrictions.Where(() => t5Alias.Criteria == criteria)))
    .TransformUsing(Transformers.DistinctRootEntity)
    .List();
Run Code Online (Sandbox Code Playgroud)

我不认为你能够嵌套那些内连接......但看起来你得到的所有左连接都得到了相同的结果.