静的メソッドでExpressionクラスを使用して、実行時に実行できます。
以下のコードは、int型の値と呼ばれる1つの引数を取るデリゲートを作成するためのコードです。それは下から上に読むので、問題の行は次のとおりです。
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"));
次に、同様の式を作成します。
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ステートメントなど)、式をコンパイルする代わりに、invokeforinvokationを検討することをお勧めします。