Преобразовать оператор linq как выражение

Я создаю универсальный метод, который генерирует предикат для фильтрации данных. это мой метод запуска

Expression.Call(member, typeof(string).GetMethod("StartsWith", new[] { typeof(string) }), constant);

так же, как мудрое мне нужно выражение, чтобы найти разделенную запятыми строку в списке строк. мое решение

filterValue.Split(",").Any(f => messageValue.Contains(f))

Мне нужно преобразовать этот метод, как указано выше, чтобы вызвать как expression.please помочь..

1 ответ

Пожалуйста, проверьте это сами, но я думаю, что это должно сработать. Вы, вероятно, можете улучшить этот код тоже.

var filterValue = Expression.Constant("a,b");
var messageValue = Expression.Constant("b");
var separator = Expression.Constant(new char[] { ',' });

var split = typeof(string).GetMethod("Split", new[] { typeof(char[]) });
var contains = typeof(string).GetMethod("Contains", new[] { typeof(string) });

var f = Expression.Parameter(typeof(string), "f");

var lambda = Expression.Lambda(Expression.Call(messageValue, contains, f), f);
var splitted = Expression.Call(filterValue, split, separator);

var expression = Expression.Call(typeof(Enumerable), "Any", new[] { typeof(string) }, splitted, lambda);
bool result = (bool)Expression.Lambda(expression).Compile().DynamicInvoke();
Другие вопросы по тегам