有没有一种方法可以在子查询上使用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(),它将应用于外部查询,而不是子查询。
有任何想法吗?
从 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)
只需查询订单(并使用 SetMaxResult)并执行“获取连接”即可确保立即加载所选订单的所有订单项。在返回的订单上,您可以访问订单商品,而不会导致新的 SQL 语句发送到数据库。
| 归档时间: |
|
| 查看次数: |
17557 次 |
| 最近记录: |