【问题标题】:nHibernate complex joinnHibernate 复杂连接
【发布时间】:2010-06-22 19:12:40
【问题描述】:

我需要对表执行复杂的左连接,但不确定如何使用条件查询编写代码。目前我有:

 public IList<RezolutionConfig> GetSearchConfigByManagerCategoryProduct(int ManagerId, int ProductTypeId, int ConfigCategoryId)
    {
        ICriteria criteria = Session.GetISession().CreateCriteria(typeof(RezolutionConfig))
            .CreateAlias("RezolutionConfigCategory", "rcc")
            .Add(Expression.Eq("rcc.id", ConfigCategoryId))
            .CreateAlias("RezolutionProductType","rpt")
            .Add(Expression.Eq("rpt.id", ProductTypeId))
            .CreateAlias("RezolutionManagerConfigs", "rmc", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
            .CreateAlias("rmc.Manager", "m", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
            .Add(Expression.Eq("m.id", ManagerId));

        return criteria.List<RezolutionConfig>();
    }

产生:

选择 * FROM [dbo].[RezolutionConfig] this_ 内连接 [dbo].[RezolutionConfigCategory] ​​rcc1_ on this_.[RezolutionConfigCategoryId]=rcc1_.[RezolutionConfigCategoryId] 内部连接 ​​[dbo].[RezolutionProductType] rpt2_ on this_.[RezolutionProductTypeId]=rpt2_.[RezolutionProductTypeId] 左外连接 [dbo].[RezolutionManagerConfig] rmc3_ on this_.[RezolutionConfigID]=rmc3_.[RezolutionConfigID] 左外连接 [dbo].[Manager] m4_ on rmc3_.[ManagerID]=m4_.[ManagerID] WHERE rcc1_.[RezolutionConfigCategoryId] = 1 和 rpt2_.[RezolutionProductTypeId] = 1 和 m4_.[ManagerID] = 9135

我需要制作的是

选择 * FROM [dbo].[RezolutionConfig] this_ 内连接 [dbo].[RezolutionConfigCategory] ​​rcc1_ on this_.[RezolutionConfigCategoryId]=rcc1_.[RezolutionConfigCategoryId] 内部连接 ​​[dbo].[RezolutionProductType] rpt2_ on this_.[RezolutionProductTypeId]=rpt2_.[RezolutionProductTypeId] 左外连接 [dbo].[RezolutionManagerConfig] rmc3_ on this_.[RezolutionConfigID]=rmc3_.[RezolutionConfigID] 左外连接 [dbo].[Manager] m4_ on rmc3_.[ManagerID]=m4_.[ManagerID] 和 m4_.[ManagerID] = 9135 WHERE rcc1_.[RezolutionConfigCategoryId] = 1 和 rpt2_.[RezolutionProductTypeId] = 1

【问题讨论】:

  • 在这种情况下,用 HQL 编写查询不是更容易吗?

标签: c# nhibernate


【解决方案1】:

NHibernate 不支持根据需要向连接添加约束:left outer join [dbo].[Manager] m4_ on rmc3_.[ManagerID]=m4_.[ManagerID] and m4_.[ManagerID] = 9135。我认为您最好的方法是在 HQL 中编写查询并使用子查询来约束 Manager。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多