使用NHibernate ICriteria/QueryOver查询向外部联接添加条件

使用NHibernate ICriteria/QueryOver查询向外部联接添加条件,nhibernate,join,fluent-nhibernate,queryover,Nhibernate,Join,Fluent Nhibernate,Queryover,在使用QueryOver或ICriteria进行查询时,是否有方法指定NHibernate中外部联接的附加条件 我需要在外部联接ed表上添加一些额外的条件,但NHibernate总是将它们添加到末尾的WHERE子句中,这并没有获得正确的行为(请参阅) 我似乎找不到任何方法来使用条件或QueryOver语法来做到这一点 谢谢(回答了我自己的问题-对不起!) 法比奥在NHibernate列表上回答了一个类似的问题——我只是想把它贴在这里 这在NH3.0标准下是可能的。 HQL中的特性 有了标准就可

在使用QueryOver或ICriteria进行查询时,是否有方法指定NHibernate中外部联接的附加条件

我需要在外部联接ed表上添加一些额外的条件,但NHibernate总是将它们添加到末尾的WHERE子句中,这并没有获得正确的行为(请参阅)

我似乎找不到任何方法来使用条件或QueryOver语法来做到这一点

谢谢(回答了我自己的问题-对不起!)

法比奥在NHibernate列表上回答了一个类似的问题——我只是想把它贴在这里

这在NH3.0标准下是可能的。 HQL中的特性

有了标准就可以看了 CreateAlias(字符串关联路径、字符串别名、JoinType JoinType、ICriterion withClause) CreateCriteria(字符串关联路径、字符串别名、JoinType JoinType、ICriterion withClause)


对于QueryOver,它是不可用的,但是这里有一个JIRA:

你可能很久以前就知道了。解决方案是在JoinAlias方法中添加ICriteria参数,如下所示:

Party aliasParty = null;
Party aliasPartyFrom = null;
var parties = QueryOver.Of<Party>(() => aliasParty)
              .Left.JoinAlias(
                               () => aliasParty.AccountabilitiesFrom, 
                               () => aliasAccFrom, 
                               Restrictions.On(() => aliasAccFrom.TimeTo).IsNull)
Party别名Party=null;
参与方别名PartyFrom=null;
变量方=查询方(()=>别名方)
.Left.JoinAlias(
()=>别名Party.AccountabilitiesFrom,
()=>从,
限制(()=>aliasAccFrom.TimeTo).IsNull)

在代码的最后一行中,我对aliasAccFrom有限制,我希望TimeTo为null。

我在查询结束时尝试了以下查询

SystemUser systemUser= null;
SurveyRequests SurveyRequests = null;

var Query2 = Session.QueryOver<SystemUser>(() => systemUser)
               .Left.JoinAlias(() => systemUser.SurveyRequests, 
               () => surveyRequest,
               Restrictions.On(()=>surveyRequest.Survey.Id).IsIn(new object []{surveyID }))
SystemUser=null;
SurveyRequests SurveyRequests=null;
var Query2=Session.QueryOver(()=>systemUser)
.Left.JoinAlias(()=>systemUser.SurveyRequests,
()=>调查请求,
限制(()=>surveyRequest.Survey.Id).IsIn(新对象[]{surveyID}))
用于
等质量的
(==)等效外观。