我有一个搜索工具,它采用复杂的搜索字符串(实际上是JSON中的n级对象图)并返回一些结果.我想通过类似LINQ的机制向其他(内部)开发人员公开这些功能.
假设每个结果都是由一个类定义的 Result
我可以创建方法看起来像:
Function Search(Expression As Linq.Expression(Of System.Func(Of Result, Boolean))) As IEnumerable(Of Result)
Run Code Online (Sandbox Code Playgroud)
我不清楚的是我如何处理该Expression参数并提取实际标准,然后我可以将其形成为运行查询的对象图.
有人能指出我如何实现这一目标的教程/示例吗?
对于一个小的背景下,我已经成功地掘到表达远远够得着的递归结构,是能够检查.Bodylambda表达式的,但是当我得到尽可能想处理Left,并Right用例如类型节点的性能ExpressionType.Or,我有问题.调试器正在使用一个朋友范围的类(BinaryExpressionProxy)来检查我无法使用的表达式,所以我显然是走错了路线.
您可能希望查看ExpressionVisitor类的子类.这提供了遍历表达式树的机制,您只需覆盖处理每种类型节点的方法.
另外,请参阅相关(可能重复)的SO问题:编写自定义LINQ提供程序的一些好教程在哪里?
编辑:以下是您可能会发现有用的其他一些链接: