【发布时间】: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