我想在if else条件之外初始化Expression Call。因为我必须使用它来生成表达体,因为我有两种不同的类型来自数据库,即int和int?。我的代码如下。 我得到错误来实例化toString对象。
var parameterExp = Expression.Parameter(typeof(T), "type");
var propertyExp = Expression.Property(parameterExp, propertyName);
MethodInfo method = typeof(string).GetMethod(methodType, new[] { typeof(string) });
var searchValue = Expression.Constant(propertyValue.ToLower(), typeof(string));
var toString = new MethodCallExpression();
if (propertyName == nameof(CustomerListDto.Id))
{
toString = Expression.Call(propertyExp, typeof(int).GetMethod("ToString", System.Type.EmptyTypes));
}
else
{
toString = Expression.Call(propertyExp, typeof(int?).GetMethod("ToString", System.Type.EmptyTypes));
}
var body = Expression.Call(toString, method, searchValue);
return Expression.Lambda<Func<T, bool>>(body, parameterExp);
我不确切知道如何初始化ExpressionCall。这是我想知道的事情。目前它给了我错误&#34; MethodCallExpression不包含带0参数&#34;的构造函数。我搜索了很多但找不到任何解决方案。
答案 0 :(得分:1)
由于构造函数是私有的,因此无法手动实例化MethodCallExpression。您可以获取MethodCallExpression的实例作为Expression.Call的返回值。您可能只想将其声明为
MethodCallExpression toString;
// Then assign it with Expression.Call(...);
if (propertyName == nameof(CustomerListDto.Id))
{
toString = Expression.Call(propertyExp, typeof(int).GetMethod("ToString", System.Type.EmptyTypes));
}
else
{
toString = Expression.Call(propertyExp, typeof(int?).GetMethod("ToString", System.Type.EmptyTypes));
}