Я работаю над кодом дерева выражений, написанным коллегой, и изучаю возможность добавления дополнительных выражений.В настоящее время он поддерживает: equals, not-equals, IsNull и т. Д. Мне нужно добавить что-то, что позволит использовать сопоставление с подстановочными знаками, похожее на команду SQL «Like» или использование регулярных выражений.На данный момент код анализирует XML-файл и извлекает данные, которые затем обрабатываются с использованием кода, аналогичного строке, показанной ниже.Это пример выражения «Равный».«CallExp» - это MemberExpression, которое в основном содержит имя поля моей таблицы (Entities), а GetConstantExpression получает подробные данные о данных, которые я сравниваю.
xRet = Expression.MakeBinary(ExpressionType.Equal, callExp, GetConstantExpression(element.Element("Value"), callExp.Type));
То, что мне нужно, это способ создания «Выражение », аналогичное команде« Мне нравится ».Можно ли это сделать, используя несколько строк, аналогичных приведенным выше, или это будет более сложным?Любые хорошие ресурсы, которые могут помочь в этой области?
=================================================================================
Новый код, основанный на обратной связи:
Я просматривал несколько примеров и пробовал следующее, которое, как я надеялся, создаст мне выражение.Это дает мне ошибку, показанную ниже.Собираюсь ли я в правильном направлении, чтобы создать выражение «StartsWith»?_entityExp является ссылкой ParameterExpression на MyClass.
ParameterExpression p = Expression.Parameter(_entityExp.Type, "entity");
MethodInfo method = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });
var containsMethodExp = Expression.Call(p, method, Expression.Constant("root"), p);
Метод 'Boolean StartsWith (System.String)', объявленный для типа 'System.String', не может быть вызван с экземпляром типа 'MyClass'