Предположим, у меня есть следующее LambdaExpression:
var itemParam = Expression.Parameter(typeof(Thing), "thing");
var someValue = "ABCXYZ123"; // value to compare
LambdaExpression lex = Expression.Lambda(
Expression.Equal(
Expression.Property(itemParam, "Id"), // I want ID to be a Body expression parameter
Expression.Constant(someValue)
), itemParm);
И я хочу, чтобы имя свойства (2-й параметр) в фабрике Expression.Property (...) было параметром. Как мне это сделать?
Я надеялся увидеть конструктор, который выглядит так, но его не существует:
Expresssion.Property(Expression instance, Expression propName)
Есть ли у меня какой-то трюк, который может преобразовать параметризованное выражение ConstantExpression в нужную строку или MemberInfo? Может быть, я поступаю об этом неправильно.
Моя догадка заключается в том, что, поскольку эти деревья выражений при компиляции становятся легковесными IL, эта информация о доступе к элементам требуется, поэтому имена конструкторов и свойства должны указываться при построении деревьев выражений.
Спасибо за любые советы!
РЕДАКТИРОВАТЬ: Хотел добавить, что это будет использоваться в качестве аргумента для метода расширения Enumerable.Where (...) для определения соответствия на отношения между двумя классами / объектами.