我正在尝试使用 NHibernate 的 Criteria API 来表达 SQL 查询,但我遇到了困难,因为我正在以一种以数据库为中心的方式思考,而 NHibernate 是以对象为中心的。
SQL(效果很好):
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
本质上,这是一个表针对自身子集的自连接。我想我可以尝试将自加入变成限制:
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)
但我也不确定如何使用 NHibernate 来表达。我正在与 DetachedCriteria 的 ProjectionList 作斗争,并且只想max(id)
在分组时进行选择col1
。
非常感谢您的建议!