使用`Expression.Equal`时,ToString()是否可以使用表达式属性?

时间:2017-04-12 14:52:51

标签: c# expression

我这样做:

var selectorParameter = Expression.Parameter(typeof(T), "c");
var selector = GetPropertyOrField<T>(selectorParameter, "CatId");
var comparisonValue = Expression.Constant("1");

var result = Expression.Equal(selector, comparisonValue);

这会引发错误,指出它无法与int32string

进行比较

最简单的解决方法是在比较之前在属性上执行ToString()。但是,我无法弄清楚如何做到这一点。我的猜测是我构建了另一个表达式,可能是对ToString()进行方法调用,但我不知道如何反馈它。

1 个答案:

答案 0 :(得分:2)

使用Expression.Call创建方法调用表达式:

// Expression for: c.CatId.ToString()
var stringExpr =
    Expression.Call(selector, selector.Type.GetMethod("ToString", new Type[]{}));

// Expression for: c.CatId.ToString() == "1"
var result = Expression.Equal(stringExpr, comparisonValue);