转换lambda表达式

时间:2010-08-07 10:39:21

标签: c# linq lambda expression

我有以下代码

Expression<Func<IPersistentAttributeInfo, bool>> expression = info => info.Owner== null;

并希望将其转换为

Expression<Func<PersistentAttributeInfo, bool>> expression = info => info.Owner== null;

持久属性信息仅在运行时通知

有可能吗?

1 个答案:

答案 0 :(得分:4)

如果只在运行时知道PersistentAttributeInfo,你显然不能静态编写lambda并让编译器为你做繁重的工作。你必须从头开始创建一个新的:

Type persistentAttributeInfoType = [TypeYouKnowAtRuntime];
ParameterExpression parameter = Expression.Parameter(persistentAttributeInfoType, "info");
LambdaExpression lambda = Expression.Lambda(
    typeof(Func<,>).MakeGenericType(persistentAttributeInfoType, typeof(bool)), 
    Expression.Equal(Expression.Property(parameter, "Owner"), Expression.Constant(null)),
    parameter);

你可以调用lambda.Compile()来返回一个类似于你的例子中变换后的lambda表达式的Delegate(虽然当然是无类型的)。​​