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

时间:2011-03-23 19:48:42

标签: nhibernate join fluent-nhibernate queryover

使用QueryOver或ICriteria查询时,有没有办法在NHibernate中指定外连接的附加条件?

我在外连接表上需要一些额外的条件,但是NHibernate总是将它们添加到最后的WHERE子句中 - 这没有得到正确的行为(参见http://weblogs.sqlteam.com/jeffs/archive/2007/05/14/criteria-on-outer-joined-tables.aspx)。

我似乎无法使用Criteria或QueryOver语法找到任何方法...

由于

3 个答案:

答案 0 :(得分:9)

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

Party aliasParty = null;
Party aliasPartyFrom = null;
var parties = QueryOver.Of<Party>(() => aliasParty)
              .Left.JoinAlias(
                               () => aliasParty.AccountabilitiesFrom, 
                               () => aliasAccFrom, 
                               Restrictions.On(() => aliasAccFrom.TimeTo).IsNull)

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

答案 1 :(得分:2)

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

Fabio在NHibernate列表上回答了类似的问题 - 我以为我会在这里发布它。

自NH3.0起,这可能与Criteria有关。 HQL中的功能 http://fabiomaulo.blogspot.com/2009/05/nhibernate-210-hql-with-clause.html

随着Criteria的展望 CreateAlias(string associationPath,string alias,JoinType joinType,ICriterion withClause) CreateCriteria(string associationPath,string alias,JoinType joinType,ICriterion withClause)

使用QueryOver它不可用,但这里有一个JIRA:https://nhibernate.jira.com/browse/NH-2592

答案 2 :(得分:1)

我尝试使用查询

进行以下查询
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 }))