【发布时间】:2011-05-06 22:25:06
【问题描述】:
我正在尝试使用 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 作斗争,并且只想在按 col1 分组时选择 max(id)。
非常感谢您的建议!
【问题讨论】:
-
你真的需要使用 Criteria 吗? HQL 可能更合适。
-
老实说,对于这些类型的查询 - 节省您的头发并使用 HQL 或只是简单的旧 SQL(使用 CreateSqlQuery)。
-
由于子查询产生的是标量集合而不是映射实体,我将如何在 HQL 中表达联接?
标签: nhibernate criteria criteria-api detachedcriteria