NHibernate标准用至少一个子对象查询父对象?

时间:2009-11-27 06:44:11

标签: nhibernate criteria subquery correlated-subquery

在我的项目中,Lines可以分组,Group的类型可以是Crossing(1)或Parallel(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));

1 个答案:

答案 0 :(得分:0)

我开始工作了!

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

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