Pregunta

En mi proyecto, Líneas se pueden agrupar y un Grupo tiene un tipo que puede ser Cruce (1) o Paralela (2). Necesito encontrar todas las líneas que tengan al menos un grupo de un tipo específico (en este caso, 1). El Id. De una línea dada puede estar en la columna LineA o LineB de un grupo. Aquí es donde llegué hasta ahora:

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

Solución

¡Lo tengo funcionando!

crit.Add(Expression.Sql(
  "EXISTS(select 1 from Group" +
  "WHERE ({alias}.Id=LineA OR {alias}.Id=LineB)"+
    "AND GroupTypeId = ?)", (int) type, NHibernateUtil.Int32));

{alias} es un marcador de posición para el objeto que se consulta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top