Дерево выражения не может содержать динамическую операцию
Обновлено: 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Во первых не логично использовать Find(. условие. ).FirstOrDefault() , потому что Find может throw ArgumentNullException в случае эсли не будет такого элемента который будет задовольнять условие а если будет, он не вернет колекцию а обьект.
Используй лутше FirstOrDefault(. условие. ) он в таком случае вернет null.
Читайте также: