Требуется справка по запросу NHibernate

#tsql #nhibernate #nhibernate-criteria

#tsql #nhibernate #nhibernate-критерии

Вопрос:

Возможно ли преобразовать следующий запрос в ICriteria или LINQ, и если да, то как?

     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
  

Комментарии:

1. запрос всегда ничего не возвращает. внутренний запрос возвращает nothing or activityId 1 или activityId 2 or activityId 1 and 2 для каждого personid, затем пересчитывает его, что равно max 2, а затем отфильтровывает все max 2

2. Да, это правда. Я немного изменил имя вручную после того, как опубликовал его здесь, поэтому, похоже, я удалил один из идентификаторов активности, потому что он должен был быть 3. Теперь я обновил вопрос.

Ответ №1:

 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