如何动态创建Expression
树时创建投射?投射Expression.Property结果
的问题是,我有string
类型的属性:
public class Test
{
public string Id { get; set; }
}
而且我想一般创建一个强类型的代表代表其返回object
而不是string
(Expression<Func<T, object>>
)lambda表达式。
现在我这样做:
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
)?
在创建拉姆达,因为你知道这个类型是什么,这将是清洁使用[通用重载]之一(http://msdn.microsoft.com/en-us/library/system .linq.expressions.expression.lambda.aspx)。虽然如果'Id'是一个值类型,'Convert'表达式仍然会被需要。 – 2012-08-03 15:44:00