多么容易它将编写一个愚蠢的皇宫提供商,只能使用我的类定义(其中没有任何目参考性质)和给我的翻译SQL。它可以假定名称的性质和所列的相同以及名称的类和底层表。可以请你给我一些指点。?

有帮助吗?

解决方案

我花了约4个月的全职工作(每天8小时)来构建,实现LINQ的整个规范中的一个稳定,合作供应商。我会说我有大约三个星期后,一个非常简单的,马车和不稳定版本,所以如果你只是寻找一些粗糙的,我会说你可能在寻找从一个星期什么长达两个月就如何好取决于你是什么类型你有requiements的。

我必须指向你这个固执的博客,马特写了关于如何实现一个LINQ提供程序,即使你可能不会是能够复制和粘贴,它会帮助你一个非常好的演练去与如何工作时想交手。你可以在这里找到Matt's演练:的 http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx 。我建议你去用同样的方式做马特,延长表达式树先生马特包括在他的教程的第二部分。

此外,当我开始这方面的工作,我不得不从表达式树可视化这么多的帮助,这真的让解析变得很简单,一旦你可以看到LINQ是如何解析的查询。

建立一个供应商确实是一个很大的乐趣,即使有时有点沮丧。祝各位好运!

其他提示

给看看到 LINQExtender 项目,是用于创建自定义LINQ提供程序工具包。

另一种选择给你一条腿似乎是 重新皇宫 这是一个框架,用于创建自定义皇宫提供者。

这里的 源代码 和一个不错的 概述(pdf) 什么是参与编写之一。

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

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

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

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

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

我创建了一个项目“ LinqToAnything ”,其目的是使它非常非常容易实现(简单)LINQ提供。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top