4

我的域模型中有一个对象,它有一个子对象。如何使用条件查询根据子项的属性进行排序?

例如:

class FooType
{
    public int Id { get; set; }
    public string Name { get; set; }
    public BarType Bar { get; set; }
}

class BarType
{
    public int Id { get; set; }
    public string Color { get; set; }
}

...

// WORKS GREAT
var orderedByName = _session.CreateCriteria<FooType>().AddOrder(Order.Asc("Name")).List();

// THROWS "could not resolve property: Bar.Color of: FooType"
var orderedByColor = _session.CreateCriteria<FooType>().AddOrder(Order.Asc("Bar.Color")).List();

我需要做什么才能启用此方案?我正在使用 NHibernate 2.1。谢谢!

4

1 回答 1

13

您需要为您的孩子添加别名或创建嵌套条件。不确定如何在 NHibernate 中执行此操作,在 Hibernate 中它是通过createCriteria()createAlias()方法完成的。然后,您将使用别名作为前缀按顺序排列。

更新Hibernate 代码示例:

Criteria criteria = session.createCriteria(FooType.class);
criteria.createAlias("bar", "b");
criteria.addOrder(Order.asc("b.color"));

我想在 NHibernate 中它会非常相似,尽管属性/实体名称是大写的。这是 NHibernate 文档中的一个示例

于 2009-08-12T23:06:04.887 回答