将字符串解析为谓词

时间:2012-07-11 10:51:22

标签: c# .net linq odata predicate

我正在尝试找出一个解决方案,在运行时,一个过程会解析一个“字符串”并返回一个谓词。到目前为止,我发现DynamicLinq类(样本)可以完成这项任务。

我想知道 - 是否有可能使用OData lib? 传入“odata”结构字符串(“?color ='red'& param = foo”),得到一个Linq谓词?

2 个答案:

答案 0 :(得分:1)

ODataLib contrib项目包含一个类似于您正在寻找的解析器。它还没有产生LINQ谓词,它只产生中间AST,但它可能会给你一些东西。请参阅http://odata.codeplex.com/wikipage?title=ODataLib&referringTitle=Home(该库可作为codeplex上的源代码或nuget包http://nuget.org/packages/Microsoft.Data.OData.Contrib提供)

答案 1 :(得分:0)

编写解析器。如果您正在为少量众所周知的类型解析谓词,那么这实际上非常简单。一般来说,它可能需要反射,这使它更多的是痛苦,但不能撤销。

在将其转换为谓词之前,我可能会将其解析为某种中间格式。如果您是针对特定类执行此操作,则最简单的方法是将其解析为该类的实例,并编写一个比较器类,用于检查一个类的非空属性。 YMMV。

通常,可能会将其解析为Dictionary或类似的东西,然后编写一个使用类型反射的比较器类(必须是你的一个参数)。