将linq语句转换为表达式

时间:2018-08-08 09:37:20

标签: .net linq lambda predicate

我正在创建一个通用方法,该方法生成谓词以过滤数据。这是我的startswtih方法

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

像明智的选择一样,我需要一个表达式来在字符串列表中找到逗号分隔的字符串。 我的解决方法是

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

我需要将其转换为上述方法以调用为expression.please帮助。

1 个答案:

答案 0 :(得分:0)

请自己进行测试,但我认为这应该可行。您可能也可以改进此代码。

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();