Я использую. Net Ядра и деревья выражений.
У меня есть класс Product, где свойство LstProp содержит список значений, разделенных ';', например, "val1; val2; val3;" :
public class Product
{
// actually contains list of values separated by ';'
public string LstProp{get; set;}
}
И я хочу фильтровать Продукты по этому свойству и содержит любые условия, используя деревья выражений. Я пробовал это, но это не работает.
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 ".
Как можно объединить несколько вызовов методов с деревьями выражений?