如何在(n)hibernate中对子对象的属性进行排序?

时间:2009-08-12 22:56:52

标签: nhibernate sorting criteria

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

例如:

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。谢谢!

1 个答案:

答案 0 :(得分:13)

您需要添加别名或为您的孩子创建嵌套条件。不知道如何在NHibernate中做到这一点,在Hibernate中它是通过createCriteria()createAlias()方法完成的。 然后,您可以按顺序使用别名作为前缀。

更新 Hibernate代码示例:

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

我想在NHibernate中它会非常相似,尽管属性/实体名称是大写的。这是来自NHibernate文档的an example