Задать вопрос

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

Всем привет. Пишется интеграция одной из систем с 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...
  • Вопрос задан
  • 2287 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
dzedzinskiy
@dzedzinskiy
Full stack developer
Во первых не логично использоватьFind(...условие...).FirstOrDefault(), потому что Find может throw ArgumentNullException в случае эсли не будет такого элемента который будет задовольнять условие а если будет, он не вернет колекцию а обьект.

Используй лутше FirstOrDefault(...условие...) он в таком случае вернет null.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Nipheris
@Nipheris Куратор тега C#
Компилятор жалуется на то, что где-то в ваших лямбдах он столкнулся с dynamic, и разумеется он не может его вкомпилить в expression tree. Скорее всего, p был dynamic, а t - нет. Укажите в вопросе конкретные типы контейнеров, по которым вы делали Find и Where, может ситуация понятнее станет (и заодно, какие интерфейсы они реализуют - IEnumerable<T> или IQueryable<T>).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы