Критерии NHibernate для запроса родительских объектов хотя бы с одним дочерним объектом?

StackOverflow https://stackoverflow.com/questions/1807135

Вопрос

В моем проекте Линии могут быть сгруппированы, а 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} является заполнителем запрашиваемого объекта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top