C# 类型为'的表达式;System.Func`2[T,System.Boolean]';不能用于返回类型';System.Boolean';

C# 类型为'的表达式;System.Func`2[T,System.Boolean]';不能用于返回类型';System.Boolean';,c#,lambda,C#,Lambda,您好,我在将表达式转换为表达式时遇到问题。这可能吗?表达式.Lambda调用与'System.Func`2[T,System.Boolean]'类型的表达式发生错误,不能用于返回类型'System.Boolean',这对我来说没有意义,因为我认为根据定义,函数具有匹配的返回类型 Expression expression = serializer.DeserializeText(serializedText); ParameterExpression entityType = Expressio

您好,我在将表达式转换为
表达式时遇到问题。这可能吗?表达式.Lambda调用与'System.Func`2[T,System.Boolean]'类型的
表达式发生错误,不能用于返回类型'System.Boolean'
,这对我来说没有意义,因为我认为根据定义,函数具有匹配的返回类型

Expression expression = serializer.DeserializeText(serializedText);
ParameterExpression entityType = Expression.Parameter(typeof(T));
Expression<Func<T, bool>> typedExpression = Expression.Lambda<Func<T, bool>>(expression, entityType);
Expression Expression=serializer.DeserializeText(serializedText);
ParameterExpression entityType=表达式。参数(typeof(T));
表达式类型dexpression=Expression.Lambda(表达式,entityType);

编辑:表达式是强类型lambda,例如s=>idArray.Contains(s.SomeIntColumn),其中s是T类型。然后使用LINQ序列化程序将表达式序列化,然后反序列化为System.LINQ.expression。因为我知道它是一个带有返回bool的T类型函数,所以我想强烈地键入它。

不确定您的代码段中的
序列化文本是什么,但只要它是一个返回
布尔值的
LambdaExpression
,您就应该能够执行以下操作

  Expression expression = Expression.Lambda(Expression.Constant(true), Expression.Parameter(typeof(string)));

  Expression<Func<string, bool>> typedExpression = (Expression<Func<string, bool>>)(expression);

  Console.WriteLine(typedExpression.Compile().Invoke("Hello"));

什么类型的
表达式
是什么?什么是
序列化程序。反序列化文本(serializedText)
在这里?在没有完整上下文的情况下很难进行注释,但请注意,它根本没有使用lambda参数,因此表达式已经是一个
LambdaExpression
?请参见编辑。是的,这是一个lambda表达式。序列化之前,它是表达式。这取决于。如果OP是从另一个lambda构造lambda,则有时需要更新参数。如
o.Method()
需要更新为
x=>x.Method()
Expression<Func<T, bool>> typedExpression = (Expression<Func<T, bool>>)Expression.Lambda(
                                                                        serializer.DeserializeText(serializedText), 
                                                                        Expression.Parameter(typeof(T)));