我已经创建了一个我需要修改的NHibernate Criteria
查询,因此我可以添加一个新条件。
该查询基于Order
对象,其中包含OrderItems
列表,然后每个OrderItem
都有一个名为{{1的 bool 属性}}
在我的条件查询中,我需要添加一个条件,其中我希望所有订单中至少有一个FinalDeliveryIndicator
将OrderItems
布尔设置为 true 。< / p>
目前,查询是:
FinalDeliveryIndicator
现在我需要补充一下我告诉你的那个条件。此查询已在此应用程序的许多位置使用,因此我无法切换到 QueryOver 或其他类型的查询,因为存在崩溃的风险。
答案 0 :(得分:1)
我们需要的是Sub-SELECT
。这可以通过子查询来实现。
我们可以使用DetachedCriteria
定义子查询:
var subquery = DetachedCriteria.For<OrderItem>()
.Add(Restrictions.Eq("FinalDeliveryIndicator", true))
.SetProjection(Projections.Property("OrderId"));
这稍后会以此SQL片段结束:
(SELECT OrderId FROM OrderItems WHERE FinalDeliveryIndicator = 1 )
这个子查询我们可以在主查询中用作WHERE的一部分
...
search.Add(Subqueries.PropertyIn("Id", subquery))
...
这会将此限制添加到WHERE子句中:
SELECT ...
FROM Order this_
JOIN ...
WHERE ...
AND this_.OrderId IS IN // the above subquery
(SELECT OrderId FROM OrderItems WHERE FinalDeliveryIndicator = 1 )