2009-11-27 7 views
0

Dans mon projet, Lines peut être groupé et un Group a un type qui peut être Crossing (1) ou Parallel (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 allé jusqu'à présent:Critères NHibernate pour interroger des objets parents avec au moins un objet enfant?

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)); 
+0

Votre requête semble OK. Cherchez-vous un meilleur moyen de le faire ou votre requête ne fonctionne pas comme il se doit? – tolism7

+0

cela ne fonctionne pas. Lève une exception mais je ne me souviens plus du message. Je l'ai eu de travail et posterai la réponse – svallory

+0

Vous devriez prendre le temps de vérifier quelle exception vous receviez et l'afficher avec votre question. – UpTheCreek

Répondre

0

Je l'ai fonctionné!

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é.

+0

Pas vraiment en utilisant les critères bien que ce soit. – UpTheCreek

Questions connexes