我没有做足够的表达树工作来让这个工作......
本质上,我想要创建的是m.MyProperty == 1
,用于采用Func<T, bool>
.
我已经MemberExpression
有了。我尝试了各种各样的事情,但我不断收到不同的错误。
我目前有这样的事情(不起作用):
object const = 1;
var equalExpression = Expression.Equal( memberExpression, Expression.Constant( const ) );
var compiled = Expression.Lambda<Func<T, bool>>( equalExpression, Expression.Parameter( typeof( T ) ).Compile();
这给了我一个例外:
System.InvalidOperationException:从范围“”引用的“MyType”类型的变量“m”,但未定义
我已经尝试过重新设计其中的几个不同部分,但没有提出任何可行的方法。
const
是一个可以是任何类型的对象,但应该与MemberExpression
.
解决方案:
object c = 1;
var parameterExpression = (ParameterExpression)memberExpression.Expression;
var equalExpression = Expression.Equal(memberExpression, Expression.Constant(c));
var compiled = Expression.Lambda<Func<T, bool>>(equalExpression, parameterExpression).Compile();