2011-03-23 74 views
2

当使用QueryOver或ICriteria查询时,有没有一种方法可以在NHibernate中的外部连接上指定附加条件?使用NHibernate ICriteria/QueryOver查询向外部连接添加条件

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

我似乎无法找到任何方式做到这一点使用标准或QueryOver语法...

感谢

回答

2

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

法比奥回答了在NHibernate列表中的类似查询 - 只是想我会在这里发布它。

从NH3.0开始,Criteria就可以实现。 在HQL特征 http://fabiomaulo.blogspot.com/2009/05/nhibernate-210-hql-with-clause.html

什么标准,看一下 CreateAlias(字符串associationPath,字符串别名,JoinType joinType,ICriterion条款二) 个createCriteria(字符串associationPath,字符串别名,JoinType joinType,ICriterion条款二)

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

9

你很可能弄清楚这很久以前。解决方案是增加的ICriteria参数JoinAlias方法,像这样:

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

我有aliasAccFrom,在那里我想,TimeTo为空,在代码的最后一行限制。

+0

谢谢你帮我解决我的问题。 – 2012-03-07 17:22:01

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 })) 
+0

对于'IsEqual'(==)等效外观[这里](http://stackoverflow.com/a/40016771/521554)。 – LosManos 2016-10-16 10:07:26