C#表达式树-组合多个方法调用
我正在使用.Net核心和表达式树 我有一个Product类,其中LstProp属性包含由“;”分隔的值列表,比如“val1;val2;val3;”: 我想通过这个属性过滤产品,并使用表达式树包含任何条件。 我试过这个,但不管用C#表达式树-组合多个方法调用,c#,linq,.net-core,expression-trees,C#,Linq,.net Core,Expression Trees,我正在使用.Net核心和表达式树 我有一个Product类,其中LstProp属性包含由“;”分隔的值列表,比如“val1;val2;val3;”: 我想通过这个属性过滤产品,并使用表达式树包含任何条件。 我试过这个,但不管用 var value="val1;val2" var productItem = Expression.Parameter(typeof(Product), "product"); var prop = Expression.Property(productItem,
var value="val1;val2"
var productItem = Expression.Parameter(typeof(Product), "product");
var prop = Expression.Property(productItem, "LstProp");
MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var values = value.ToString().Split(';');
Expression predicate = null;
foreach (var val in values)
{
var listPropExpression = Expression.Constant(val);
var containsExpresion=Expression.Call(listPropExpression, method, property);
predicate = predicate != null ? Expression.Or(predicate, containsExpresion) : containsExpresion;
}
因此,我尝试为列表中的每个值组合对Contains函数的调用,但得到了关于“BinaryExpression和MethodCallExpression之间没有转换”的错误
如何将多个方法调用与表达式树结合起来?我找到了解决方案。
我有两个问题:
Expression.Call(属性、方法、ListPropertExpression)而不是Expression.Call(listPropExpression、方法、属性)代码>
product=>product.LstProp.Contains(“val1”)或product.LstProp.Contains(“val2”)
var value="val1;val2"
var productItem = Expression.Parameter(typeof(Product), "product");
var prop = Expression.Property(productItem, "LstProp");
MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var values = value.ToString().Split(';');
Expression predicate = null;
foreach (var val in values)
{
var listPropExpression = Expression.Constant(val);
var containsExpresion=Expression.Call(listPropExpression, method, property);
predicate = predicate != null ? Expression.Or(predicate, containsExpresion) : containsExpresion;
}