多个表的NHibernate QueryOver联接语法

多个表的NHibernate QueryOver联接语法,nhibernate,join,queryover,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

如何使用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

假设您已设置了所有关系,则只需设置alias变量以在查询版本中使用

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();
t2t2alias=null;
T3-t3Alias=null;
T4 t4Alias=null;
T5 t5Alias=null;
int标准=1;
var results=Session.QueryOver()
.Left.JoinAlias(x=>x.T2,()=>t2Alias)
.Left.JoinAlias(()=>t2Alias.T3,()=>t3Alias)
.Left.JoinAlias(x=>x.T4,()=>t4Alias)
.Left.JoinAlias(()=>t4Alias.T5,()=>t5Alias)
.Where(限制.析取()
.Add(限制条件,其中(()=>t3Alias.Criteria==Criteria))
.Add(限制条件,其中(()=>t5Alias.Criteria==Criteria)))
.变压器使用(变压器.距离)
.List();
我不认为你能嵌套那些内部连接…但是看起来你会得到与所有左连接相同的结果