Próbuję wyrazić kwerendę SQL przy użyciu interfejsu API NHibernate Criteria, a ja napotykam na trudności, ponieważ myślę w sposób zorientowany na bazę danych, podczas gdy NHibernate jest obiektowo zorientowany.Jak mogę wyrazić zgodę na dołączanie do podzapytania pogrupowanego za pomocą NHibernate?
SQL (działa świetnie):
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
Zasadniczo, jest to samosprzężenie z tabeli przeciwko podgrupie sobie. Przypuszczam, że mógłbym spróbować obrócić samosprzężenie do ograniczenia:
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)
Ale nie jestem pewien, jak to wyrazić, że za pomocą NHibernate albo; Walczę z ProjectionList DetachedCriteria i chcę wybrać tylko max(id)
podczas grupowania przez col1
.
Dziękuję bardzo za sugestie!
Czy naprawdę trzeba użyć kryteria? HQL może być lepszym rozwiązaniem. –
Szczerze mówiąc, w przypadku tego typu zapytań - zapisz włosy i używaj HQL lub po prostu starego SQL (z CreateSqlQuery). – cbp
Ponieważ podzapytanie powoduje zbieranie skalarów zamiast zmapowanych jednostek, jak wyrazić sprzężenie w HQL? –