NHibernate左连接限制

NHibernate左连接限制,nhibernate,left-join,restriction,Nhibernate,Left Join,Restriction,我有以下标准 session.CreateCriteria<DomainModels.Models.FreieAbrechnung>() .CreateAlias("FreieAbrechnungPositionen", "fp", JoinType.LeftOuterJoin) .Add(Restrictions.Eq("fp.IstAktiv", true))

我有以下标准

session.CreateCriteria<DomainModels.Models.FreieAbrechnung>()
       .CreateAlias("FreieAbrechnungPositionen", "fp", JoinType.LeftOuterJoin)                                            
       .Add(Restrictions.Eq("fp.IstAktiv", true))
       .Add(Restrictions.Eq("Kunde.ID", kundenId))
       .Add(Restrictions.Eq("IstAktiv", true))
       .Add(Restrictions.Eq("Abgeschlossen", false))
       .SetResultTransformer(CriteriaSpecification.DistinctRootEntity)                                            
       .List<DomainModels.Models.FreieAbrechnung>();
问题是,限制fp1_u1.IstAktiv=1位于where子句中。此限制必须位于左侧外部联接中。像这样:

left outer join FreieAbrechnungPosition fp1_ on this_.ID=fp1_.FreieAbrechnungID and fp1_.IstAktiv = 1
为了得到正确的Sql语句,我应该在标准中更改什么

谢谢,
Dani

要向联接添加条件,必须使用HQL而不是条件

session.CreateCriteria<DomainModels.Models.FreieAbrechnung>()
       .CreateAlias("FreieAbrechnungPositionen", "fp", JoinType.LeftOuterJoin)                                            
       .Add(Restrictions.Eq("fp.IstAktiv", true))
       .Add(Restrictions.Eq("Kunde.ID", kundenId))
       .Add(Restrictions.Eq("IstAktiv", true))
       .Add(Restrictions.Eq("Abgeschlossen", false))
       .SetResultTransformer(CriteriaSpecification.DistinctRootEntity)                                            
       .List<DomainModels.Models.FreieAbrechnung>();
您的查询的粗略翻译如下:

select f
from FreieAbrechnung f
left join f.FreieAbrechnungPositionen fp with IstAktiv = 1
where f.IsAktiv = 1
... etc

谢谢我怎样才能用freieabechnung加载freieabechnung?我不能这样做:选择f,fp from…left join fetch f.freieabechnungpositionen fp etcnow我有一个例外:在获取的关联上不允许with子句;使用过滤器。但是我不知道如何将过滤器设置为freieabechnungpositionen而不是with-子句。哦,等等,freieabechnungpositionen是一个集合(德语没有帮助)。那么您就不能同时进行筛选和直接获取。您必须使用子查询。是的,是一个集合。对不起,这不是我写的。。。我尝试使用子查询。谢谢