C# 转换lambda表达式
我有以下代码C# 转换lambda表达式,c#,linq,lambda,expression,C#,Linq,Lambda,Expression,我有以下代码 Expression<Func<IPersistentAttributeInfo, bool>> expression = info => info.Owner== null; Expression=info=>info.Owner==null; 想把它转换成 Expression<Func<PersistentAttributeInfo, bool>> expression = info => info.Owner=
Expression<Func<IPersistentAttributeInfo, bool>> expression = info => info.Owner== null;
Expression=info=>info.Owner==null;
想把它转换成
Expression<Func<PersistentAttributeInfo, bool>> expression = info => info.Owner== null;
Expression=info=>info.Owner==null;
但是,PersistentAttributeInfo仅在运行时已知
有可能吗?如果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);
Type persistenttributeinfo=[TypeYouKnowAtRuntime];
ParameterExpression参数=Expression.parameter(persistentAttributeInfo类型,“信息”);
LambdaExpression lambda=表达式.lambda(
typeof(Func).MakeGenericType(PersistentAttributeInfo,typeof(bool)),
Expression.Equal(Expression.Property(参数“Owner”)、Expression.Constant(null)),
参数);
您可以调用lambda.Compile()来返回一个委托,该委托类似于示例中转换的lambda表达式(当然是非类型化的)