Как разобрать строковое выражение linq с объектом? - PullRequest
0 голосов
/ 12 апреля 2019

Я попытался использовать метод DynamicExpressionParser ParseLambda, и мне удалось легко разобрать строковые выражения (например: x=> X.Name == "John" или x=> x.Name.Contains("John")), которые отлично подходят для условий Where. Но моя проблема заключается в попытке разобрать выражение в Select, где я хочу вернуть анонимный объект на основе найденных данных.

Пример:

myList.Select(p=> new { p.Name, p.LastName })

По сути, я получил только строковые выражения, подобные этим:

myList.Where("p=> p.Name == \"John\"");

И я хочу вот что:

myList.Select("p=> new { p.Name, p.LastName }")

Iv пробовал несколько перегрузок метода ParseLambda , но я получил все виды исключений. Я следую рекомендациям из их репозитория github .

Использование примера, приведенного с Инициализаторами объектов данных (Customers.Select ("new (CompanyName as Name, Phone)");) работает только для типизированных классов, а не для анонимных объектов, как я пытаюсь делаем.

Мне также удалось заставить это работать ранее, используя CSharpScript (EvaluateAsync метод), но время синтаксического анализа ужасно (примерно в 20 раз медленнее), так как это в значительной степени компилирует код снова. Итак, я ищу альтернативы.

Чтобы выяснить, почему использование Data Object Initializers не сработало, вот несколько примеров попыток кода:

error A

error B

Что привело к NullReferenceExceptions.

И куча других, которые я не могу легко воспроизвести без внесения серьезных изменений в код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...