我正在尝试制定一个解决方案,在运行时一个过程将解析一个“字符串”并返回一个谓词。到目前为止,我发现的是可以完成这项工作的DynamicLinq类(示例)。
我想知道 - 是否可以使用 OData lib 来相同?传入“odata”结构字符串(“?color='red'¶m=foo”),得到一个Linq谓词?
ODataLib contrib 项目包括一个类似于您正在寻找的解析器。它还没有产生 LINQ 谓词,它只产生中间 AST,但它可能会给你一些起点。请参阅http://odata.codeplex.com/wikipage?title=ODataLib&referringTitle=Home(该库可作为 codeplex 上的源代码或作为 nuget 包http://nuget.org/packages/Microsoft.Data.OData .贡献)
编写解析器。如果您要为少数众所周知的类型解析谓词,这实际上相当简单。一般来说,它可能需要反思,这让它有点痛苦,但不是不可撤销的。
在将其转换为谓词之前,我可能会将其解析为某种中间格式。如果您正在为特定类执行此操作,最简单的方法可能是将其解析为该类的实例,并编写一个比较器类来检查一个与另一个的非空属性。YMMV。
通常,可能会将其解析为 Dictionary 或类似的东西,并编写一个使用反射类型的比较器类(这必须是您的参数之一)。