如何创建表达式树以执行类似于SQL“Like”命令的操作

我正在研究由同事编写的一些表达式树代码,并且正在研究添加其他表达式的可能性。 它目前支持:equals,not-equals,IsNull等。我需要添加一些东西,允许它使用类似于SQL“Like”命令或使用正则表达式的通配符比较。 目前,代码解析XML文件并提取数据,然后使用类似于下面所示的代码的代码处理这些数据。 这是“平等”表达的一个例子。 “callExp”是一个MemberExpression,它基本上保存了我的表(Entities)的字段名称,而GetConstantExpression获取了我正在比较的数据的详细信息。

xRet = Expression.MakeBinary(ExpressionType.Equal, callExp, GetConstantExpression(element.Element("Value"), callExp.Type)); 

我所追求的是一种创建类似于“Like”命令的“Expression”的方法。 这可以使用类似于上面的几行来完成,还是会更复杂? 有什么好的资源可以帮助这个领域吗?

================================================== ================================

基于反馈的新代码:

我正在看一些例子,并尝试了以下我希望能创建一个表达式。 它给了我下面显示的错误。 我是否朝着正确的方向创建“StartsWith”表达式? _entityExp是对MyClass的ParameterExpression引用。

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

在’System.String’类型上声明的方法’Boolean StartsWith(System.String)’不能使用’MyClass’类型的实例调用

表达式树只能表示与.NET语言相同的function – 方法调用,属性评估等。

你通常最接近“喜欢”的是调用string.StartsWithstring.EndsWithstring.Contains 。 如果您想要处理正则表达式,则可能需要使用Regex.IsMatch 。 无论哪种方式,这都是封装在方法中而不是表达树本身的“语言”中的东西。

如果不了解表达树的消耗方式,就很难确切地说出你应该做什么。 您可以创建自己的“Like”方法,消费者会注意到并正确处理,例如……或者您可以使用现有的字符串/正则表达式方法。

使用Contains,startswith或endwith等