NHibernate 3.1 Linq с Contains и Any

Мы находимся в процессе перехода на NH3.1, который идет хорошо - все работает, насколько мы можем судить по существующему коду. Один из мотивацией для перехода на NH3 с 2 было использование Linq поддержка и в целом работает очень хорошо. Однако я борется с некоторыми более сложными предложениями where, особенно когда я хотите проверить на основе подгруппы:

var results = from r in registrations 
              where ( 
                         from p in persons 
                         where p.ExplicitManagers.Any(m => m.Manager == manager) 
                         select p 
                     ).Contains(r.Registrant) 
              select r; 

где модель:
p - это человек , а регистрация r имеет регистранта типа Person
p содержит набор ассоциативных объектов ExplicitManager , которые иметь ссылку на другое лицо (менеджер).

примечание: регистрации - это IQueryable .Query () и лица в IQueryable .Query () .
По сути, я пытаюсь ограничить регистрацию, где person1 является явным менеджером p . Я могу сделать это через присоединения, но не через Содержит подзапрос .

Я получаю следующую ошибку:

"System.InvalidOperationException: Последовательность содержит более одного соответствующий элемент "

Причина, по которой это делается в качестве подзапроса, заключается в том, что в конечном итоге мне нужно реализовать логику проверки менеджеров, чтобы сделать ее многоразовой (на самом деле это более сложно, но я упростил его для этого примера потому что это Any в Contains , который вызывает горе).

Содержит , кажется, работает нормально, если нет подзапроса с Any. Я что-то делаю неправильно, или это что-то неподдерживаемое, или ошибка, и есть ли другой способ добиться того же?

Большое спасибо за любую помощь, которую вы можете оказать.

8
задан Daniel Hilgarth 17 May 2011 в 11:26
поделиться