C# 如何创建表达式树以执行类似于SQL的操作;例如;命令

C# 如何创建表达式树以执行类似于SQL的操作;例如;命令,c#,linq-to-entities,expression-trees,C#,Linq To Entities,Expression Trees,我正在研究一位同事编写的一些表达式树代码,并正在研究添加其他表达式的可能性。它目前支持:equals、notequals、IsNull等。我需要添加一些东西,允许它使用类似于SQL“Like”命令的通配符比较或使用正则表达式。此时,代码解析XML文件并提取数据,然后使用类似于下面所示的代码对数据进行处理。这是“相等”表达式的一个示例。“callExp”是一个MemberExpression,它基本上保存表(实体)的字段名,GetConstantExpression获取有关我正在比较的数据的详细信

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

xRet = Expression.MakeBinary(ExpressionType.Equal, callExp, GetConstantExpression(element.Element("Value"), callExp.Type));
我想要的是一种创建类似于“Like”命令的“表达式”的方法。这可以用几行类似于上面的代码来完成吗?还是会更复杂?有什么好的资源可以在这方面提供帮助吗

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

基于反馈的新代码:

我看了一些例子,尝试了下面的方法,希望能给我一个表达。它给出了如下所示的错误。我创建“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”的实例一起调用。

用于like

表达式树只能表示与.NET语言中相同类型的功能-方法调用、属性求值等

通常最接近“like”的是调用
string.StartsWith
string.EndsWith
string.Contains
。如果您想处理正则表达式,可能需要使用
Regex.IsMatch
。不管怎样,这都是封装在方法中而不是表达式树本身的“语言”中的东西


如果不进一步了解表达式树是如何被使用的,就很难确切地说出应该做什么。您可以创建自己的“喜欢”方法,消费者会注意到并适当处理,例如。。。或者您可以使用现有的string/regex方法。

这将起作用,但我也希望能够使用通配符。我决定尝试使用“StartsWith”。我已经编辑了上面的代码,但是得到了一个错误。我这样做的方向对吗?@Retrocoder:不,这个错误是正确的。您试图调用
string.StartsWith(string)
,但提供了一个非字符串参数。要么将参数更改为字符串,要么编写自己的带有所需签名的
StartsWith
方法。