0

在我的项目中,Lines可以进行分组,并且 aGroup的类型可以是Crossing(1) 或Parallel(2)。我需要找到至少具有一组指定类型(在本例中为 1)的所有行。给定行的 Id 可以在列上LineALineB组上。这是我到目前为止的地方:

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));
4

1 回答 1

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}是被查询对象的占位符。

于 2009-11-29T00:42:52.350 回答