Вернуть класс из вложенной коллекции, используя NHibernate
Доман:
<code>class Action Products: IList of class ActionProducts: Category: class Category Products: IList of class Product </code>
Теперь я хочу это:
<code> var products = from a in Session.Linq<Action>() from ap in a.Products from p in ap.Category.Products where a.Name == name select p; </code>
И этот Linq на самом деле работает, но: 1. производит выбор для всех таблиц, а не только для продуктов 2. создает левые внешние объединения, а не внутренние 3. Distinct () в запросе не работает (хотя ToList (). Distinct () работает) ,
Также это можно сделать с помощью SelectMany (a = & gt; a.Products) .SelectMany (ap = & gt; ap.Category.Products), но он вообще не работает с текущим NHibernate.Linq.
Поэтому я хочу использовать ICriteria. Но я не вижу, как вернуть товар, а не действие?
<code> ICriteria criteria = Session.CreateCriteria(typeof(Action)) .Add(Expression.Eq("Name", name)) .CreateAlias("Products", "ap") .CreateAlias("ap.Category.Products", "p") .SomehowReturnMeOnly("p"); </code>
Так как же мне SomehowReturnMeOnly (& quot; p & quot;)? Так что я могу сделать
<code>return criteria.List<Product>(); </code>
что не удастся, потому что ICriteria выбирает действия, а не продукты?
Я могу рассмотреть HQL, но на самом деле мне не нравятся строковые запросы ... Например, вот тот HQL, который работает и выдает именно тот SQL, который мне нужен:
<code> IQuery query = Session.CreateQuery("select distinct p from Action a inner join a.Products as ap inner join ap.Category.Products as p"); return query.List<Product>(); </code>