简单(哑)LINQ提供程序

简单(哑)LINQ提供程序,linq,provider,Linq,Provider,编写一个简单的LINQ提供程序,它可以只使用我的类定义(没有任何对象引用作为属性)并提供翻译后的SQL,这有多容易。它可以假定属性和列的名称以及类和基础表的名称相同。你能给我一些建议吗?看看这个项目,它是一个用于创建自定义LINQ提供程序的工具包。我花了大约4个月的全职工作(每天8小时)来构建一个稳定、工作的提供程序,实现LINQ的整个规范。我会说我在大约三周后有了一个非常简单、有缺陷和不稳定的版本,所以如果你只是在寻找一些粗糙的东西,我会说你可能会在一周到两个月之间寻找任何东西,这取决于你有多

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

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

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

为此,我必须向您指出任性的博客,Matt写了一篇关于如何实现linq提供程序的非常好的演练,即使您可能无法复制和粘贴,它也将帮助您掌握如何在工作时思考。您可以在此处找到Matt的演练:。我建议您像Matt那样进行操作,并扩展Matt在其教程第二部分中包含的表达式树访问者

另外,当我开始使用这个工具时,我得到了表达式树可视化工具的很多帮助,一旦你能看到linq是如何解析查询的,解析就变得容易多了


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

另一个帮助您的选项似乎是创建自定义LINQ提供程序的框架


以下是编写一个Linq提供程序所涉及的内容和细节。

我创建了一个项目“”,该项目旨在使实现一个(简单的)Linq提供程序变得非常简单。

我在博客上根据自己从头开始开发Linq到SQL提供程序的经验编写了一系列教程,从表达式树组合阶段(调用LINQ方法)开始,继续使用表达式访问者,将查询分解为组件,解析where子句,生成文本和参数,最后使用.NET表达式名称空间将整个内容编译为IL

我看到过许多不完整的帖子,它们承诺解释如何编写一个提供程序,但都没有达到标准,几乎没有触及表面,实际上也没有提供任何远程可执行的东西

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

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

很难找到时间发表这篇材料,但我想——如果它可以帮助其他人,那么没有理由浪费这段经历: