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