¿Los criterios de NHibernate para consultar objetos primarios con al menos un objeto secundario?
-
05-07-2019 - |
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));
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