简单表达式组合
我试图创建一个简单的表达我有这样的简单类型:简单表达式组合
public class BSType
{
public int Length { get; set; }
public string Name { get; set; }
}
中,我试图动态创建过滤器表达式,这将是
(bsType) => bsType.Length == 3
我创建了一个表达式,它返回给我的常量3
var right = Expression.Constant(3);
然后我有另一个表达式,我的Func<BSType, int>
S的看起来像这样
Expression<Func<BSType, int>> left = bsType => bsType.Length;
当我尝试向他们提供平等的表达,像这样
Expression.Equal(left, right);
比较我得到一个错误:
The binary operator Equal is not defined for the types 'System.Func`2[ExpressionBuilder.BSType,System.Int32]' and 'System.Int32'
我觉得我需要将类型的参数传递给函数的左侧,以便它可以解析长度,但我不确定如何这样做,任何人都可以指向正确的方向?
你试图表达的其中一个发生在一个FUNC作为参数,而不是与表达体结合,像这样结合:
Expression.Equal(left.Body, right)
'left'是OP代码中的'Expression
我不是说'left'是'Func ',它是一个表达式,每个表达式都有返回类型。在原来的问题返回类型'left'是'Func '。我的代码有什么问题?它构造了请求的表达式并且工作。 – Zergatul
表达式不会“返回”任何内容。表达式是一些代码的表示。你可以说它代表的代码返回一个'int'。它当然不会返回一个'Func'。您的代码只是为给出的一个示例构造一个硬编码结果,而不是解决问题要求解决的问题。这就好像有人问你如何将两个数字加在一起,比如说2和5,并且你写了一个只返回7的方法,并说“它为你的例子返回正确的结果”。这是真的,但它并没有解决问题的实际问题。 – Servy
我已经更新了我的问题,以显示大致发生了什么 –
' Expression>''你不需要提取int的一部分,这样'left'是一个'int'而不是'Expression >'? –
@TZZA耶我该怎么做?以某种方式生成可以与实体框架工作的表达式 –