Пред- полагая У меня есть следующий LambdaExpression:Могу ли я параметризовать имя свойства PropertyExpression, используя выражения LINQ?
И я хочу, чтобы имя свойства (второй параметр) в Expression.Property (...) завод, чтобы быть параметром, как я могу идти об этом?
Я надеялся увидеть конструктор, который выглядит, как это, но он не существует:
Expresssion.Property(Expression instance, Expression propName)
Есть ли какой-то трюк, я могу тянуть, что может конвертировать параметризованные ConstantExpression в нужной строке или MemberInfo? Возможно, я ошибаюсь.
Моя догадка заключается в том, что, поскольку эти деревья выражений при компиляции становятся легкими ИЛ, эта информация доступа к члену требуется, поэтому при создании деревьев выражений должны предоставляться имена членов и свойств.
Спасибо за любые советы!
EDIT: Требуется добавить, что это будет использоваться в качестве аргумента для метода расширения Enumerable.Where (...) для определения соответствия для отношения между двумя классами/сущностями.
Что вы планируете делать с полученным выражением? Вы планируете отправить его в EF/LINQ2, если это возможно? –
dasblinkenlight
Фактически, он используется для разрешения ссылки на сущность через определяемые пользователем ключи ... но в конечном итоге может быть использован поставщиком IQueryable, который у нас есть. :) –
Perfect - в этом случае поставщик запросов может искать вашу вспомогательную функцию (см. Мой ответ ниже) и делать свою магию соответственно. Я предполагаю, что возможность поиска по свойству, идентифицируемому именем строки, встроена в ваш поставщик запросов. – dasblinkenlight