我这样做:
var selectorParameter = Expression.Parameter(typeof(T), "c");
var selector = GetPropertyOrField<T>(selectorParameter, "CatId");
var comparisonValue = Expression.Constant("1");
var result = Expression.Equal(selector, comparisonValue);
这会引发错误,指出它无法与int32
和string
最简单的解决方法是在比较之前在属性上执行ToString()
。但是,我无法弄清楚如何做到这一点。我的猜测是我构建了另一个表达式,可能是对ToString()进行方法调用,但我不知道如何反馈它。
答案 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);