Sto cercando di esprimere una query SQL utilizzando l'API Criteria di NHibernate e sto riscontrando delle difficoltà perché sto pensando in un modo centrato sul database mentre NHibernate è object-centric.Come posso esprimere l'adesione a una sottoquery raggruppata utilizzando NHibernate?
SQL (grandi opere):
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
In sostanza, si tratta di un self-join di un tavolo contro un sottoinsieme di se stesso. Suppongo che avrei potuto provare a girare il self-join in una restrizione:
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)
Ma io non sono sicuro di come esprimere che l'uso di NHibernate sia; Sto combattendo con ProjectionList di DetachedCriteria e voglio selezionare solo max(id)
mentre raggruppo per col1
.
Grazie mille per i vostri suggerimenti!
non si ha realmente bisogno di utilizzare criteri? HQL potrebbe essere una soluzione migliore. –
Onestamente, per questi tipi di query - salva i tuoi capelli e usa HQL o semplicemente SQL vecchio (con CreateSqlQuery). – cbp
Poiché la sottoquery risulta in una raccolta di scalari anziché entità mappate, come potrei esprimere il join in HQL? –