使用QueryOver或ICriteria查询时,有没有办法在NHibernate中指定外连接的附加条件?
我在外连接表上需要一些额外的条件,但是NHibernate总是将它们添加到最后的WHERE子句中 - 这没有得到正确的行为(参见http://weblogs.sqlteam.com/jeffs/archive/2007/05/14/criteria-on-outer-joined-tables.aspx)。
我似乎无法使用Criteria或QueryOver语法找到任何方法...
由于
答案 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 }))