Is there a way to specify additional conditions on outer joins in NHibernate when querying using QueryOver or ICriteria?
I need some extra conditions on the outer join-ed table, but NHibernate always adds them to the WHERE clause at the end - which does not get the correct behaviour (see http://weblogs.sqlteam.com/jeffs/archive/2007/05/14/criteria-on-outer-joined-tables.aspx).
I can't seem to find any way to do this using Criteria or the QueryOver syntax...
Thanks
You probably figure out this long time ago. Solution is to add ICriteria parameter in JoinAlias method, like this:
Party aliasParty = null;
Party aliasPartyFrom = null;
var parties = QueryOver.Of<Party>(() => aliasParty)
.Left.JoinAlias(
() => aliasParty.AccountabilitiesFrom,
() => aliasAccFrom,
Restrictions.On(() => aliasAccFrom.TimeTo).IsNull)
I have restriction on aliasAccFrom, where i want that TimeTo is null, in last line of code.
(Answered my own question - sorry!)
Fabio answered a similar query on the NHibernate list - just thought I'd post it here.
That is possible with Criteria since NH3.0. The feature in HQL http://fabiomaulo.blogspot.com/2009/05/nhibernate-210-hql-with-clause.html
With Criteria have a look to CreateAlias(string associationPath, string alias, JoinType joinType, ICriterion withClause) CreateCriteria(string associationPath, string alias, JoinType joinType, ICriterion withClause)
With QueryOver it is not available but there's a JIRA for this here: https://nhibernate.jira.com/browse/NH-2592
i tried the following query with query over
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 }))
来源:https://stackoverflow.com/questions/5410781/adding-conditions-to-outer-joins-with-nhibernate-icriteria-queryover-query