Мы находимся в процессе перехода на 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
и лица
в IQueryable
.
По сути, я пытаюсь ограничить регистрацию, где person1
является явным менеджером p
. Я могу сделать это через присоединения, но не через
Содержит подзапрос
.
Я получаю следующую ошибку:
"System.InvalidOperationException: Последовательность содержит более одного соответствующий элемент "
Причина, по которой это делается в качестве подзапроса, заключается в том, что в конечном итоге мне нужно
реализовать логику проверки менеджеров, чтобы сделать ее многоразовой
(на самом деле это более сложно, но я упростил его для этого примера
потому что это Any
в Contains
, который вызывает горе).
Содержит
, кажется, работает нормально, если нет подзапроса с Any.
Я что-то делаю неправильно, или это что-то неподдерживаемое, или
ошибка, и есть ли другой способ добиться того же?
Большое спасибо за любую помощь, которую вы можете оказать.