Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换lambda表达式_C#_Linq_Lambda_Expression - Fatal编程技术网

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表达式(当然是非类型化的)