Вложенная коллекция NHibernate с использованием QueryOver

#nhibernate

#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 , чтобы получить все, что имеет некоторый порядок.Имена.localName (что-то вроде этого):

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

Я хотел бы использовать новую функцию NH3 QueryOver, не используя Linq (я нашел несколько решений в SO, но все они используют Linq).

Ответ №1:

Все, что вам нужно сделать, это объявить переменную alias для коллекции 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>();