Дерево выражений не может содержать динамическую операцию?
Всем привет. Пишется интеграция одной из систем с 1С. Подключение через Com, все переменные dynamic. Стала происходить непонятная вещь. Из 1С приходят строки (rows), поля которых содержат ссылку на объекты. Я беру нужное мне поле, и передаю его функции принимающей dynamic. Дальше динамическая переменная разбирается на составляющие и в List.Find( ... )
происходит проверка вида:
Find(p => p.1CCode == prod.Родитель.Код.ToString()).FirstOrDefault()
PS: Проверка по "Коду" есть ли 1С объект в листе.
При запуске выполнения компилятор 2 раза выдает ошибку: Дерево выражений не может содержать динамическую операцию и указывает на те места которые я выделил.
Что за фак?
Чем этот фрагмент отличается от Where(t => t.1CCode == priceType.Код.ToString()).FirstOrDefault() который работает без нареканий?
UPD: Изначально все поиски в листе проводились через FindAll().Where().FoD(), что я считаю не правильно, если нужно получить один объект, решив в дальнейшем искать через Find().FoD() получил ошибку. Изменил свои Find().FoD() на FindAll().Where().FoD() и получил рабочий код LOL...
Во первых не логично использоватьFind(...условие...).FirstOrDefault(), потому что Find может throw ArgumentNullException в случае эсли не будет такого элемента который будет задовольнять условие а если будет, он не вернет колекцию а обьект.
Используй лутше FirstOrDefault(...условие...) он в таком случае вернет null.
Компилятор жалуется на то, что где-то в ваших лямбдах он столкнулся с dynamic, и разумеется он не может его вкомпилить в expression tree. Скорее всего, p был dynamic, а t - нет. Укажите в вопросе конкретные типы контейнеров, по которым вы делали Find и Where, может ситуация понятнее станет (и заодно, какие интерфейсы они реализуют - IEnumerable<T> или IQueryable<T>).
Коллекции кастомнные. Наследуют AbstractNHEntityManager от NHibernate.
Из интерфейсов реализуют только IEntityManager который тоже входит в NHibernate.
Find() и Where() возвращают ICollection и реализуют:
IList`1
ICollection`1
IEnumerable`1
IEnumerable
IList
ICollection
IReadOnlyList`1
IReadOnlyCollection`1