我有一个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。如何使此子查询与基本查询相关?
答案 0 :(得分:0)
想出来。
Core.Property propAlias = null;
baseQuery.JoinAlias(parent => parent.Properties, () => propAlias)
.Where(() => propAlias.PropertyClass == sortByProperty);
var query = baseQuery.OrderBy(() => propAlias.Value);