2011-10-17 7 views
0

Est-il possible de convertir la requête suivante en ICriteria ou LINQ, et si oui, comment?Aide de requête NHibernate requise

SELECT Test.personid 
    FROM 
    (
     SELECT r.PersonId AS personid, e.ActivityId 
     FROM Event e 
     INNER JOIN Registration r ON e.Id = r.EventId 
     WHERE e.ActivityId IN (1, 2) 
     GROUP BY r.PersonId, e.ActivityId 
    ) AS Test 

    GROUP BY Test.personid 
    HAVING COUNT(Test.ActivityId) >= 2 
+0

la requête retournera toujours rien. la requête interne ne retourne «rien» ou «activityId 1» ou «activityId 2» ou «activityId 1 et 2» pour chaque personne, puis compte par dessus, qui est max 2, puis filtre tous max 2 – Firo

+0

Oui, c'est vrai. J'ai fait un changement de nom manuel après l'avoir posté ici, donc il semble que j'ai supprimé l'un des identifiants d'activité, car il était censé être 3. J'ai mis à jour la question maintenant. – Mattias

Répondre

0
var result = from r in session.Query<Registration>() 
      where r.Event.ActivityId == 1 || r.Event.ActivityId == 2 
      group r by r.Person into g 
      where g.Min(x => x.Event.ActivityId) != g.Max(x => x.Event.ActivityId) 
      select g.Key 

les états suivants, prendre toutes les personnes wich ont différentes activityIds là des groupes qui équivaut à

ActivityId == 1 || ActivityId == 2 
Having Count(r.Event.ActivityId) >= 2 
+0

Merci, je vais essayer dès maintenant. – Mattias