私はいくつかの計算に進むことができる式ツリーのいくつかのプロパティの値を読んでみたいと思います。式ツリーでプロパティの値を読み取る方法は?
var products = db.Products
.Where(GetPredicate())
.ToList();
private Expression<Func<Product, bool>> GetPredicate()
{
ParameterExpression pe = Expression.Parameter(typeof(Product), "p");
Expression exp0 = Expression.Property(pe, "Price");
//I'd like to know the value of the 'Price'
// so I can do some calculation, then check whether
//this particular product meet the criteria...
Expression body = Expression.Constant(Result); //result is a boolean
var expr = Expression.Lambda<Func<Product, bool>>(body, new ParameterExpression[] { pe });
return expr;
}
Expression.Convertを使用しようとしましたか? – napi15
[式ツリーを使用したオブジェクトのプロパティの読み込み]の可能な複製(https://stackoverflow.com/questions/16436323/reading-properties-of-an-object-with-expression-trees) – johnnyRose
式ツリーを作成するとき'GetPredicate'には' Price'という値はありません( 'Product'オブジェクトがないので)。したがって、コンパイルされた式ツリーに渡す前に、実際の価値を調べることはできません。しかし、必要に応じて式ツリーに何らかの種類の比較や制約を追加することができます。何かは次のようになります: 'Expression.Add(exp0、Expression.Constant(156));'戻り値などをチェックできます。しかし、値はまだ分かりません。入力値が比較されることを知っているだけです私は何かを見逃したり、あなたの質問を理解していませんでしたか? –