NHibernate Criteria list属性的任何元素都为true

时间:2015-05-14 16:49:36

标签: c# nhibernate hql criteria restrictions

我已经创建了一个我需要修改的NHibernate Criteria查询,因此我可以添加一个新条件。

该查询基于Order对象,其中包含OrderItems列表,然后每个OrderItem都有一个名为{{1的 bool 属性}}

在我的条件查询中,我需要添加一个条件,其中我希望所有订单中至少有一个FinalDeliveryIndicatorOrderItems布尔设置为 true 。< / p>

目前,查询是:

FinalDeliveryIndicator

现在我需要补充一下我告诉你的那个条件。此查询已在此应用程序的许多位置使用,因此我无法切换到 QueryOver 或其他类型的查询,因为存在崩溃的风险。

1 个答案:

答案 0 :(得分:1)

我们需要的是Sub-SELECT。这可以通过子查询来实现。

15.8. Detached queries and subqueries

我们可以使用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 )
相关问题