Criteria API关系的子查询

时间:2016-07-13 11:29:59

标签: c# nhibernate criteria nhibernate-criteria icriteria

注意:在所有示例中,如果类A,B和C不是特定类的占位符。我正在谈论的查询是在运行时动态生成的,我的代码并不总是知道具体类型。以下示例中的所有文字值都是我实际用例中的变量。

我有一个类的层次结构A -> B -> C。它们通过多对一关系联系在一起。还有另一个表P,但它没有通过关系链接。

我在A上生成条件查询,并希望在in上的属性上添加子查询(C)。

我想要做的查询的简化示例如下。

var recordsCriteria = session.CreateCriteria(baseType.FullName, "base");

var subCriteria = NC.Subqueries.PropertyIn("B.C.Id",
    NC.DetachedCriteria.For<P>()
        .SetProjection(NC.Projections.Property<P>(x => x.EntityId))
        .Add(NC.Restrictions.Eq(NC.Projections.Property<P>(x => x.PermissionId), 1)))
));

recordsCriteria.Add(subCriteria);

这不起作用,因为NHibernate似乎只能处理一个级别的关系(也就是说,如果我做B.Id而不是它有效,但我需要任意深度)。

我可以从https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs#L669看到这似乎是&#34;意图&#34;行为(虽然这种限制似乎没有记录在任何地方?我当然错过了至少阅读Criteria API的信息)

我可以使用Criteria API以另一种方式进行此查询吗?

0 个答案:

没有答案