我的域模型中有一个具有子对象的对象。如何使用条件查询根据子项的属性进行排序?
例如:
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。谢谢!
答案 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。