我有以下代码
Expression<Func<IPersistentAttributeInfo, bool>> expression = info => info.Owner== null;
并希望将其转换为
Expression<Func<PersistentAttributeInfo, bool>> expression = info => info.Owner== null;
持久属性信息仅在运行时通知
有可能吗?
答案 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(虽然当然是无类型的)。