Критерии NHibernate для запроса родительских объектов хотя бы с одним дочерним объектом?
-
05-07-2019 - |
Вопрос
В моем проекте Линии
могут быть сгруппированы, а Group
имеет тип, который может быть Crossing
(1) или Параллельно
(2). Мне нужно найти все строки, в которых есть хотя бы одна группа указанного типа (в данном случае 1). Идентификатор данной строки может быть либо в столбце LineA
, либо в LineB
группы. Вот где я дошел до этого:
Criteria crit = session.CreateCriteria(typeof(Line), "ln");
DetachedCriteria count = DetachedCriteria.For<Group>()
.SetProjection(Projections.CountDistinct("Id"))
.Add(Expression.Or(
Expression.EqProperty("LineA", "ln.Id"),
Expression.EqProperty("LineB", "ln.Id")))
.Add(Expression.Eq("GroupTypeId", 1));
crit.Add(Subqueries.Gt(0, count));
Решение
Я получил это работает!
crit.Add(Expression.Sql(
"EXISTS(select 1 from Group" +
"WHERE ({alias}.Id=LineA OR {alias}.Id=LineB)"+
"AND GroupTypeId = ?)", (int) type, NHibernateUtil.Int32));
{alias}
является заполнителем запрашиваемого объекта.
Не связан с StackOverflow