Дерево выражения не может содержать динамическую операцию

Обновлено: 04.11.2024

Всем привет. Пишется интеграция одной из систем с 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.

Решения вопроса 1

dzedzinskiy

Mykola Dzedzinskyi @dzedzinskiy Full stack developer

Во первых не логично использовать Find(. условие. ).FirstOrDefault() , потому что Find может throw ArgumentNullException в случае эсли не будет такого элемента который будет задовольнять условие а если будет, он не вернет колекцию а обьект.

Используй лутше FirstOrDefault(. условие. ) он в таком случае вернет null.

Читайте также: