Я попытался использовать метод 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](https://i.imgur.com/TeXDVWy.png)
![error B](https://i.imgur.com/1ipwmtE.png)
Что привело к NullReferenceExceptions
.
И куча других, которые я не могу легко воспроизвести без внесения серьезных изменений в код.