Question

Dans mon projet, les lignes peuvent être groupées et un groupe a un type qui peut être Traverser (1) ou . Parallèle (2). J'ai besoin de trouver toutes les lignes qui ont au moins un groupe d'un type spécifié (dans ce cas, 1). L'identifiant d'une ligne donnée peut être sur la colonne LineA ou LineB d'un groupe. Voici où je suis arrivé jusqu'ici:

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));
Était-ce utile?

La solution

Je l'ai fait fonctionner!

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

{alias} est un espace réservé pour l'objet interrogé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top