在我的项目中, Lines 可以分组, Group 的类型可以是 Crossing (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} 是要查询的对象的占位符。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top