Linq查询的DSL - 寻找想法

时间:2009-02-25 04:14:19

标签: linq dsl

我目前正在使用CMS,它使用带有自己的定制查询语言的ORM(即使用select / where / orderby like语句)。我将这种迷你语言称为DSL,但我的术语可能不对。

我们正在为此CMS编写控件,但我不希望将控件耦合到CMS,因为我们对是否要在较长时间内继续使用此CMS有一些疑问。

我们可以通过使用我们自己的DAL /抽象层或非抽象层来轻松地将控件与CMS分离。

然后我记得在大多数CMS控件上,它们提供了一个属性(设计时可编辑),用户可以在其中输入查询来控制在数据源中填充的内容。不错的功能 - 问题是如何抽象这个功能?

然后我想到可能存在一个DSL框架,可以为我提供一种简单的查询语言,可以在运行时将其转换为LINQ表达式。从而将我与CMS的查询DSL分离。

这样的事情存在吗?我在浪费时间吗? (可能是后者)

由于

1 个答案:

答案 0 :(得分:1)

这不会完全回答你的问题,但是LINQ的扩展允许你将LINQ查询的谓词指定为名为Dynamic LINQ的字符串,所以如果你想将条件存储在某些字符串中基于格式,您可以在此基础上构建您的语言。你仍然需要找到一种方法来表示不同的子句(其中/ orderby / etc。)但是对于作为参数传递给它们的谓词,你可以使用Dynamic LINQ。

请注意,动态LINQ允许您解析字符串,但AFAIK无法将现有的表达式树转换为该字符串...因此需要做一些工作。

(但我不确定我是否完全理解这个问题,所以也许我完全理解: - ))