我有一个parent
包含property
. 每个property
都有一个propertyclass
和一个value
。我想返回一个按附件parent
排序的列表,value
任何附加property
给定的propertyclass
假设parent
代表一辆汽车,存在一个property
带有propertyclass
“颜色”的。我想返回按“颜色”属性值排序的所有汽车的列表。
在直接 SQL 中,这很容易,我们可以通过相关子查询进行排序。
SELECT * FROM [Parent]
ORDER BY (SELECT [Value] FROM [Property] WHERE [PropertyClass] = 'Color'
AND [ParentId] = [Parent].[Id])
但我根本不知道如何在 NHibernate 中实现这一点。
我已经创建了一个子查询投影并使用它设置查询的排序:
var dc = DetachedCriteria.For<Core.Property>()
.Add(Restrictions.Eq("PropertyClass", sortByProperty))
.SetProjection(Projections.Property("Value"));
var query = baseQuery.OrderBy(Projections.SubQuery(dc));
但是由此产生的order-by子句漏掉了相关的子查询部分[ParentId] = [Parent].[Id]
-,因此是无效的sql。如何使这个子查询与基本查询相关联?