2

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

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

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

谢谢

4

3 回答 3

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 为空。

于 2012-01-14T19:06:45.000 回答
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

于 2011-03-23T19:58:12.280 回答
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 }))
于 2013-02-27T14:01:20.160 回答