NHIbernate: настройка подзапроса для использования значения свойства из внешнего запроса - PullRequest
1 голос
/ 16 апреля 2011

У меня есть следующие под / критерии:

var sq = DetachedCriteria.For<Title>()
  .CreateAlias("Genres", "genre")
  .Add(Restrictions.IsNull("genre.ParentId"))
  .SetProjection(Projections.Property<Genre>(g=>g.Name));

var q =
  session.CreateCriteria(typeof(Title))
      .SetProjection(
            Projections.Alias(Projections.SqlFunction("array", null, Projections.SubQuery(sq)), "TopLevelGenre"),
            Projections.Property<Title>(t1=>t1.Id)
        )
        .SetMaxResults(5);

Что приводит к следующему запросу SQL:

SELECT array((SELECT this_0_.title as y0_
          FROM   title this_0_
                 inner join title_genre genres3_
                   on this_0_.title_id = genres3_.title_id
                 inner join genre genre1_
                   on genres3_.genre_id = genre1_.genre_id
          WHERE  genre1_.parent_id is null)) as y0_,
   this_.title_id                             as y1_
FROM   title this_
limit  5 /* :p1 */

Как мне настроить его так, чтобы мой подзапрос использовал значение свойства из внешнего запроса? Например, я бы хотел, чтобы подзапрос фильтровал по значению title_id. В NHibernate есть что-то, что позволяет мне проецировать значение свойства в подзапрос?

Спасибо!

1 Ответ

0 голосов
/ 12 мая 2011

Оказывается, я был близко.Все, что мне нужно было сделать, это создать псевдоним для заголовка и использовать его в предложении «Где» в моем подзапросе.

Title title = null;

c = Session
  .QueryOver(() => title)
  ....
  .SelectList(list => list
      .Select(Projections.Alias(Projections.SqlFunction("array", null, Projections.SubQuery(sq.Where(tt => tt.Id == title.Id))), "TopLevelGenre"))
  );

Надеюсь, что это поможет кому-то ..

...