0

我有一个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。如何使这个子查询与基本查询相关联?

4

1 回答 1

0

弄清楚了。

Core.Property propAlias = null;

baseQuery.JoinAlias(parent => parent.Properties, () => propAlias)
  .Where(() => propAlias.PropertyClass == sortByProperty);

var query = baseQuery.OrderBy(() => propAlias.Value);
于 2013-07-31T15:30:27.473 回答