gpt4 book ai didi

c# - 如何创建表达式树来执行类似于 SQL "Like "命令的操作

转载 作者:太空狗 更新时间:2023-10-29 22:34:53 27 4
gpt4 key购买 nike

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

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

我所追求的是一种创建类似于“喜欢”命令的“表达式”的方法。这可以使用类似于上面的几行来完成,还是会更复杂?在这方面有什么好的资源可以提供帮助吗?

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

基于反馈的新代码:

我正在查看一些示例并尝试了以下示例,我希望它们能为我创建一个表达式。它给了我如下所示的错误。创建“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 语言中获得的相同类型的功能 - 方法调用、属性评估等。

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

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

关于c# - 如何创建表达式树来执行类似于 SQL "Like "命令的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3289134/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com