0

私のプロジェクトでLinesは、グループ化することができ、 aは(1) または(2)Groupのいずれかのタイプになります。指定されたタイプ (この場合は 1) のグループが少なくとも 1 つあるすべての行を見つける必要があります。特定の行の ID は、列またはグループのいずれかです。これが私がこれまでに得た場所です:CrossingParallelLineALineB

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 に答える