使用QueryOver的NHibernate子集合

Dar*_*usz 2 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;}
}
Run Code Online (Sandbox Code Playgroud)

quesetion是如何查询subcollection Order以获得所有有一些Order.Names.LocalName(类似这样):

IList<Order> orders = repository.GetByProductLocalName("laptop");
Run Code Online (Sandbox Code Playgroud)

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

dot*_*joe 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>();
Run Code Online (Sandbox Code Playgroud)