NHibernate HQL SELECT TOP在子查询中

And*_*ndy 5 nhibernate hql

有没有一种方法可以在子查询上使用SetMaxResult()?我正在编写查询以返回属于最新订单的所有订单商品。因此,我需要限制子查询上的记录数。

等效的sql看起来像:

SELECT i.*
FROM tbl_Orders o
JOIN tbl_OrderItems i on i.OrderId = o.Id
WHERE
o.Id in (SELECT TOP 1 o.Id FROM tbl_Orders o orderby o.Date desc)
Run Code Online (Sandbox Code Playgroud)

我直接使用hql是因为条件api不允许您投影另一个域对象(我正在查询订单,但想返回订单项)

我知道hql不接受“ SELECT TOP”,但是如果我使用SetMaxResult(),它将应用于外部查询,而不是子查询。

有任何想法吗?

Pav*_*shy 5

从 NHibernate 3.2 开始,您可以SKIP n / TAKE n在查询结束时在 hql 中使用。您的查询将是:

SELECT i.*
FROM tbl_Orders o
JOIN tbl_OrderItems i on i.OrderId = o.Id
WHERE
o.Id in (SELECT o.Id FROM tbl_Orders o orderby o.Date desc take 1)
Run Code Online (Sandbox Code Playgroud)


Fri*_*ben 3

只需查询订单(并使用 SetMaxResult)并执行“获取连接”即可确保立即加载所选订单的所有订单项。在返回的订单上,您可以访问订单商品,而不会导致新的 SQL 语句发送到数据库。