实现自定义LINQ-to-X提供程序

时间:2012-08-29 15:20:27

标签: .net linq

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

假设每个结果都由类Result

定义

我可以创建类似的方法:

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

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

有人能指出我如何实现这一目标的教程/示例吗?

对于一些小背景,我设法深入挖掘表达式以获得递归结构,并且能够检查.Body lambda表达式,但是当我想要处理时节点的LeftRight属性,例如类型ExpressionType.Or,我有问题。调试器正在使用一个朋友范围的类(BinaryExpressionProxy)来检查我无法使用的表达式,因此我明确指向了错误的路径。

2 个答案:

答案 0 :(得分:7)

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

另外,请参阅相关(可能重复)的SO问题:Where are some good tutorials on writing a custom LINQ Provider?

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

Expression Trees (MSDN article)

Expression Tree Basics (blog post)

答案 1 :(得分:2)

您可以尝试使用我编写的名为LinqToAnything的项目,您可以根据需要使用该项目来包装数据源以显示IQueryable。