简单(愚蠢)LINQ提供程序

时间:2009-04-03 14:32:30

标签: linq provider

写一个简单的LINQ提供程序是多么容易,它只能使用我的类定义(没有任何对象引用作为属性)并给我翻译的SQL。它可以假定属性的名称和列相同,以及类和基础表的名称。你能给我一些指示吗?

5 个答案:

答案 0 :(得分:6)

我花了大约4个月的全职工作(每天8小时)来建立一个稳定的,有效的提供商,实现整个linq规范。我会说大约三个星期后我有一个非常简单,有缺陷和不稳定的版本,所以如果你只是在寻找一些粗糙的东西,我会说你可能会看到从一周到两个月的任何事情,这取决于你有多好你有什么类型的要求。

我必须指出你的Wayward博客,Matt写了一篇关于如何实现linq提供程序的非常好的演练,即使你可能无法复制和粘贴,它也会帮助你了解工作时如何思考。你可以在这里找到Matt的演练:http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx。我建议你像Matt一样去做,并在他的教程的第二部分扩展表达式访问者Matt。

此外,当我开始使用它时,我从表达式树可视化工具那里得到了很多帮助,一旦你看到linq如何解析查询,它确实使解析变得更加容易。

建立一个提供商真的很有趣,即使有时有点令人沮丧。祝你好运!

答案 1 :(得分:4)

查看LINQExtender项目,是一个用于创建自定义LINQ提供程序的工具包。

答案 2 :(得分:3)

为您提供支持的另一个选择似乎是re-linq,这是一个用于创建自定义LINQ提供程序的框架。

这是Source code以及写一篇文章的好overview (pdf)

答案 3 :(得分:1)

我在我的博客上编写了一个教程系列,基于我从头开始构建LINQ-to-SQL提供程序的经验,从表达式树组合阶段(调用LINQ方法)开始,继续表达访问者,分解查询组件,解析where子句,生成文本和参数,最后使用.NET表达式命名空间将整个事物编译成IL。

我见过许多不完整的帖子,这些帖子承诺解释如何编写提供程序,但是标记很差,几乎没有触及表面,实际上并没有提供任何远程可执行文件。

我根据自己的经验编写的博客系列有一个示例项目可供下载,简单的提供程序仅涵盖教程示例所需的功能。但是,它还包括支持许多操作(where,join,first,count,top等),子查询,嵌套语句等的生产版本。此外,它产生了比我更多的更清晰的SQL。从实体和LINQ-to-SQL中看到的。没有不必要的/冗余的嵌套,用括号括起来等等。

对于那些具有良好抽象思维水平的人来说,开发这样一个提供者并不是很多人设定的艰巨任务。我开发了一个用于生产环境的大约3个月的兼职工作(意思是一些晚上和周末)。从开始,它的目标是性能和整洁的SQL - 它实现的目标。

找到发布这些材料的时间有点困难,但我想 - 如果它可以帮助那些人,那么这种经历就没有理由浪费:

答案 4 :(得分:0)

我创建了一个项目' LinqToAnything'它旨在使(简单的)Linq提供程序非常容易实现。