使用QueryOver的NHibernate子集合

时间:2011-05-10 19:48:49

标签: nhibernate

我有简单的课程:

public class Order
{
    public int Id {get;set;}
    public IList<Name> Names{get;set;}
}

public class Name
{
    public int Id {get;set;}
    public int LangId {get;set;}
    public string LocalName {get;set;}
}

该问题是如何查询Order的子集合以获取所有具有一些Order.Names.LocalName(类似于此)的内容:

IList<Order> orders = repository.GetByProductLocalName("laptop");

我想使用新的NH3功能QueryOver,而不是使用Linq(我在SO中找到了一些解决方案,但它们都使用了Linq)。

1 个答案:

答案 0 :(得分:9)

您需要做的就是为Names集合声明一个别名变量,然后您可以在where子句中使用它...

String localName = "laptop";
Name namesAlias = null;

return session.QueryOver<Order>()
    .JoinAlias(x => x.Names, () => namesAlias)
    .Where(() => namesAlias.LocalName == localName)
    .TransformUsing(Transformers.DistinctRootEntity)
    .List<Order>();