c# - left - nhibernate session createquery
Criterios de NHibernate donde cualquier elemento de la propiedad de la lista es verdadero (1)
Lo que necesitaríamos es Sub-SELECT
. Esto podría lograrse con subconsulta .
15.8. Consultas separadas y subconsultas
Podemos definir la subconsulta con DetachedCriteria
:
var subquery = DetachedCriteria.For<OrderItem>()
.Add(Restrictions.Eq("FinalDeliveryIndicator", true))
.SetProjection(Projections.Property("OrderId"));
Esto luego terminaría como este fragmento SQL:
(SELECT OrderId FROM OrderItems WHERE FinalDeliveryIndicator = 1 )
Y esta subconsulta que podemos utilizar como parte de DONDE en nuestra consulta principal
...
search.Add(Subqueries.PropertyIn("Id", subquery))
...
Lo que agregaría esta restricción a la cláusula WHERE:
SELECT ...
FROM Order this_
JOIN ...
WHERE ...
AND this_.OrderId IS IN // the above subquery
(SELECT OrderId FROM OrderItems WHERE FinalDeliveryIndicator = 1 )
Tengo una consulta de Criteria
NHibernate ya creada que necesito modificar para poder agregar una nueva condición.
La consulta se basa en el objeto Order
, que tiene una lista de OrderItems
y luego, cada OrderItem
tiene una propiedad bool llamada FinalDeliveryIndicator
.
En mi consulta Criteria, necesito agregar una condición en la que deseo que todos los pedidos que al menos uno de sus artículos de OrderItems
tenga el bool FinalDeliveryIndicator
establecido en verdadero .
La consulta, por el momento, es:
var search = NHibernateSession.CreateCriteria(typeof(Order))
.CreateAlias("Contract", "C", JoinType.InnerJoin)
.CreateAlias("C.Supplier", "S", JoinType.InnerJoin)
.Add(Restrictions.Eq("Buyer.Id", companyId))
.Add(Restrictions.Eq("IsDeleted", false))
.Add(Restrictions.Eq("IsActiveVersion", true))
.SetFirstResult(paging.PageIndexSQL)
.SetMaxResults(paging.PageSize)
.AddOrder(SortOrder.Desc("Id"));
Ahora necesito agregar esa condición de la que te hablé. Esta consulta ya está en uso en muchos lugares de esta aplicación y, por lo tanto, no puedo cambiar a QueryOver ni a ningún otro tipo de consulta, debido al riesgo de colapsar algo.