Expression
ツリーを動的に作成するときにキャストを作成するにはどうすればよいですか?
問題は、タイプのプロパティがあることですstring
:
public class Test
{
public string Id { get; set; }
}
そして、 ( ) のobject
代わりにを返すデリゲートを表す、厳密に型指定されたラムダ式を一般的に作成したいと考えています。string
Expression<Func<T, object>>
今、私はこれをやっています:
private static Expression<Func<T, object>> CreateIdQuery()
{
Type type = typeof(T);
PropertyInfo idProperty = type.GetProperty("Id");
ParameterExpression lambdaParam = Expression.Parameter(type, "x");
MemberExpression body = Expression.Property(lambdaParam, idProperty);
LambdaExpression expr = Expression.Lambda(body, lambdaParam);
return (Expression<Func<T, object>>)expr;
}
しかし、最後の行で例外がスローされます (にキャストできませんExpression<Func<Test, string>>
) Expression<Func<Test, object>>
。
式の本体をキャストするにはどうすればよいですか (MemberExpression
一部を にキャストする必要があると想定していますobject
)。