Estoy tratando de expresar una consulta SQL utilizando la API de Criterios de NHibernate, y estoy teniendo dificultades porque estoy pensando en una forma centrada en la base de datos, mientras que NHibernate está centrado en el objeto.¿Cómo puedo expresar la unión a una subconsulta agrupada utilizando NHibernate?
SQL (funciona muy bien):
select outerT.id, outerT.col1, outerT.col2, outerT.col3
from tbl outerT
inner join
(select max(innerT.id)
from tbl innerT
group by innerT.col1) grpT
on outerT.id = grpT.id
En esencia, se trata de una autocombinación de una mesa contra un subconjunto de sí mismo. Supongo que podría intentar girar el auto-ensambla en una restricción:
select outerT.id, outerT.col1, outerT.col2, outerT.col3
from tbl outerT
where outerT.id in (select max(innerT.id) from tbl innerT group by innerT.col1)
Pero no estoy seguro de cómo expresar que el uso de NHibernate tampoco; Estoy peleando con ProjectionList de DetachedCriteria y quiero seleccionar solo max(id)
al agrupar por col1
.
¡Muchas gracias por sus sugerencias!
lo que realmente necesita utilizar criterios? HQL podría ser un mejor ajuste. –
Honestamente, para este tipo de consultas, guárdese y use HQL o simplemente SQL antiguo (con CreateSqlQuery). – cbp
Dado que la subconsulta da como resultado una colección de escalares en lugar de entidades mapeadas, ¿cómo expresaría la unión en HQL? –