Nibernate Critérios para consultar objetos pais com pelo menos um objeto infantil?
-
05-07-2019 - |
Pergunta
No meu projeto, Lines
pode ser agrupado e um Group
tem um tipo que pode ser Crossing
(1) ou Parallel
(2). Preciso encontrar todas as linhas que possuem pelo menos um grupo de um tipo especificado (neste caso, 1). O ID de uma determinada linha pode estar na coluna LineA
ou LineB
de um grupo. Aqui é onde cheguei até agora:
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));
Solução
Eu consegui funcionar!
crit.Add(Expression.Sql(
"EXISTS(select 1 from Group" +
"WHERE ({alias}.Id=LineA OR {alias}.Id=LineB)"+
"AND GroupTypeId = ?)", (int) type, NHibernateUtil.Int32));
{alias}
é um espaço reservado para o objeto que está sendo consultado.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow