0

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

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

通过使用我们自己的 DAL/抽象层或其他什么,我们可以很容易地将我们的控件与 CMS 分离。

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

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

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

谢谢

4

1 回答 1

1

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

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

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

于 2009-02-25T19:55:32.857 回答