【问题标题】:transform a lambda expression转换 lambda 表达式
【发布时间】:2010-08-07 10:39:21
【问题描述】:
我有以下代码
Expression<Func<IPersistentAttributeInfo, bool>> expression = info => info.Owner== null;
并想将其转换为
Expression<Func<PersistentAttributeInfo, bool>> expression = info => info.Owner== null;
PersistentAttributeInfo 只在运行时才知道
有可能吗?
【问题讨论】:
标签:
c#
linq
lambda
expression
【解决方案1】:
如果 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(当然是无类型的)。