6

我有一个搜索工具,它采用复杂的搜索字符串(实际上是 JSON 中的 n 级对象图)并返回一些结果。我想通过类似 LINQ 的机制向其他(内部)开发人员公开该功能。

假设每个结果都由一个类定义Result

我可以创建看起来像这样的方法:

Function Search(Expression As Linq.Expression(Of System.Func(Of Result, Boolean))) As IEnumerable(Of Result)

我不清楚的是如何遍历该Expression参数并提取实际标准,然后我可以将其形成对象图以运行我的查询。

有人可以指出如何实现这一点的教程/示例吗?

对于一些背景知识,我已经设法深入研究表达式以获得递归结构并能够检查.Bodylambda 表达式,但是当我想要处理具有例如 type 的节点的Left和属性时,我有问题。调试器正在使用 Friend 范围的类 ( ) 来检查我无法使用的表达式,所以我显然走错了路。RightExpressionType.OrBinaryExpressionProxy

4

2 回答 2

7

您可能希望查看ExpressionVisitor类的子类化。这提供了遍历表达式树的机制,您所拥有的所有方法都覆盖了处理每种类型节点的方法。

以下是您可能会发现有用的其他一些链接:

于 2012-08-29T15:41:25.627 回答
4

您可以尝试使用我编写的名为LinqToAnything的项目,您可以使用它来包装数据源以公开 IQueryable,具体取决于您的需要。

于 2014-07-31T10:53:12.020 回答