是否使用NHibernate条件查询至少有一个子对象的父对象?

是否使用NHibernate条件查询至少有一个子对象的父对象?,nhibernate,criteria,subquery,correlated-subquery,Nhibernate,Criteria,Subquery,Correlated Subquery,在我的项目中,线可以分组,组的类型可以是交叉1或平行2。我需要找到至少有一组指定类型的所有行(在本例中为1)。给定行的Id可以位于组的LineA列或LineB列上。到目前为止,我的收获如下: Criteria crit = session.CreateCriteria(typeof(Line), "ln"); DetachedCriteria count = DetachedCriteria.For<Group>() .SetProjection(Projections.Count

在我的项目中,线可以分组,组的类型可以是交叉1或平行2。我需要找到至少有一组指定类型的所有行(在本例中为1)。给定行的Id可以位于组的LineA列或LineB列上。到目前为止,我的收获如下:

Criteria crit = session.CreateCriteria(typeof(Line), "ln");

DetachedCriteria count = DetachedCriteria.For<Group>()
.SetProjection(Projections.CountDistinct("Id"))
.Add(Expression.Or(
    Expression.EqProperty("LineA", "ln.Id"),
    Expression.EqProperty("LineB", "ln.Id")))
.Add(Expression.Eq("GroupTypeId", 1));

crit.Add(Subqueries.Gt(0, count));
我让它工作了

crit.Add(Expression.Sql(
  "EXISTS(select 1 from Group" +
  "WHERE ({alias}.Id=LineA OR {alias}.Id=LineB)"+
    "AND GroupTypeId = ?)", (int) type, NHibernateUtil.Int32));

{alias}是所查询对象的占位符。

您的查询看起来正常。您是否正在寻找更好的方法来执行此操作,或者您的查询无法正常工作?它无法正常工作。抛出异常,但我记不起消息。我让它工作,并将发布答案你应该花时间检查你收到的异常情况,并将其与你的问题一起发布。但不是真正使用标准。