2011-10-17 8 views
0

次のクエリをICriteriaまたはLINQに変換することはできますか?NHibernateクエリのヘルプが必要です

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

と同等ですがグループ内の別のactivityIdsを持ってWICH取ります。内側のクエリは、すべてのpersonidに対して 'nothing'または' activityId 1'または 'activityId 2'または' activityId 2'または 'activityId 1 and 2'を返します。そして、最大2でカウントアップしてから最大2をフィルタリングします。 – Firo

+0

はい、そうです。私はここにそれを掲示した後に私はいくつかの手動の名前を変更したので、それは3であるはずだったので、私は活動IDの一つを削除したようだ。今質問を更新した。 – Mattias

答えて

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 

次の状態、すべての人が、クエリは常に何も返さないだろう

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

ありがとう、私は今試してみます。 – Mattias