2011-03-23 97 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