您可以使用带有静态方法的 Expression 类来执行它的运行时间。
下面的代码用于创建一个委托,该委托采用一个称为 int 类型值的参数。它从底部到顶部读取,因此有问题的行是:
var method = LambdaExpression.Lambda(orExp, Expression.Parameter(typeof(int), "value"));
方法的主体将参数的值与对新创建的 foo 类型对象的方法 Bar 的调用进行比较
var exp2 = Expression.Equal(Expression.Parameter(typeof(int), "value"), Expression.Property(Expression.New(typeof(Foo).GetConstructor(new Type[] { })), "Bar"));
然后它会创建一个类似的表达式和 or's them
var orExp = Expression.OrElse(exp1, exp2);
最后一件事是调用编译。该调用会生成一个委托,该委托可以在您的 where 方法调用中使用。
希望它对我不是 100% 确定从参数中获取值的表达式有所帮助
var exp1 = Expression.Equal(Expression.Parameter(typeof(int),"value"), Expression.Property(Expression.New(typeof(Bar).GetConstructor(new Type[] { })), "Foo"));
var exp2 = Expression.Equal(Expression.Parameter(typeof(int), "value"), Expression.Property(Expression.New(typeof(Foo).GetConstructor(new Type[] { })), "Bar"));
var orExp = Expression.OrElse(exp1, exp2);
var method = LambdaExpression.Lambda(orExp, Expression.Parameter(typeof(int), "value"));
method.Compile();
如果您需要将 LambdaExpression 转换为不同于二进制代码的内容(例如,转换为 SQL 语句),您可能想查看调用的调用而不是编译表达式