NHIbernate: настройка подзапроса для использования значения свойства из внешнего запроса
У меня есть следующие под / критерии:
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 ответ
Решение
Оказывается, я был близко. Все, что мне нужно было сделать, это создать псевдоним для Title и использовать его в предложении Where моего подзапроса.
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"))
);
Надеюсь, что это помогает кому-то..