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));
Foi útil?

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
scroll top