Преобразовать оператор 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();