【问题标题】:Adding conditions to outer joins with NHibernate ICriteria/QueryOver query使用 NHibernate ICriteria/QueryOver 查询向外部联接添加条件
【发布时间】:2011-03-23 19:48:42
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: nhibernate join fluent-nhibernate queryover


    【解决方案1】:

    你可能很久以前就知道了。解决方法是在 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 在最后一行代码中为空。

    【讨论】:

      【解决方案2】:

      (回答了我自己的问题 - 抱歉!)

      Fabio 在 NHibernate 列表上回答了一个类似的查询 - 只是想我会在这里发布。

      从 NH3.0 开始,Criteria 就可以做到这一点。 HQL 中的功能 http://fabiomaulo.blogspot.com/2009/05/nhibernate-210-hql-with-clause.html

      使用 Criteria 看看 CreateAlias(字符串关联路径,字符串别名,JoinType joinType,ICriterion withClause) CreateCriteria(string associationPath, string alias, JoinType joinType, ICriterion withClause)

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

      【讨论】:

        【解决方案3】:

        我通过查询尝试了以下查询

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

        【讨论】:

        • 对于IsEqual (==) 等效外观here
        猜你喜欢
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多