Вопрос

Насколько легко было бы написать тупой поставщик LINQ, который мог бы просто использовать мои определения классов (у которых нет ссылок на объекты в качестве свойств) и выдавать мне переведенный SQL.Он может предполагать, что имена свойств и столбцов совпадают, а также имена классов и базовых таблиц.Не могли бы вы, пожалуйста, дать мне несколько советов.?

Это было полезно?

Решение

Мне потребовалось около 4 месяцев полной занятости (8 часов в день), чтобы создать стабильно работающий провайдер, который реализует всю спецификацию linq.Я бы сказал, что примерно через три недели у меня была очень простая, глючная и нестабильная версия, так что, если вы просто ищете что-то грубое, я бы сказал, что вам, вероятно, потребуется от недели до двух месяцев, в зависимости от того, насколько вы хороши и какие у вас требования.

Я должен указать вам на блог Wayward для этого, Мэтт написал действительно хорошее пошаговое руководство по внедрению поставщика linq, и даже если вы, вероятно, не сможете скопировать и вставить, это поможет вам разобраться в том, как думать во время работы.Вы можете найти пошаговое руководство Matts здесь: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx .Я рекомендую вам поступить так же, как Мэтт, и расширить дерево выражений visitor, которое Мэтт включает во вторую часть своего руководства.

Кроме того, когда я начал работать с этим, мне так сильно помог визуализатор дерева выражений, что это действительно значительно упростило синтаксический анализ, как только вы смогли увидеть, как linq выполняет синтаксический анализ запросов.

Создавать провайдера действительно очень весело, даже если временами это немного расстраивает.Я желаю вам всем всяческой удачи!

Другие советы

Взгляните на LINQExtender ( Расширитель LINQ ) project, представляет собой инструментарий для создания пользовательских поставщиков LINQ.

Другим вариантом для того, чтобы поддержать вас, по-видимому, является повторная компоновка который является платформой для создания пользовательских поставщиков LINQ.

Вот этот Исходный код и приятный обзор (pdf) о том, что связано с написанием одного из них.

Я написал серию руководств в своем блоге, основываясь на своем опыте разработки поставщика LINQ-to-SQL с нуля, начиная со стадии составления дерева выражений (вызов методов LINQ), продолжая с выражением visitor, разбивая запрос на компоненты, анализируя предложение where, генерируя текст и параметр и, в конечном итоге, компилируя все это в IL с использованием .Пространство имен NET expression.

Я видел много незавершенных постов, в которых обещалось объяснить, как написать провайдера, но они очень далеки от цели, едва касаются поверхности и фактически не предоставляют ничего удаленно исполняемого.

В серии блогов, которые я написал на основе своего опыта, есть пример проекта, доступный для загрузки с помощью simple provider, который охватывает только функциональность, необходимую в примере из руководства.Однако он также включает рабочую версию, поддерживающую ряд операций (where, join, first, count, top и т.д.), подзапросы, вложенные инструкции и т.д.Кроме того, он создает более чистый SQL, чем многое из того, что я видел в Entities и LINQ-to-SQL.Здесь нет ненужной / избыточной вложенности, заключения всего в квадратные скобки и т.д.

Для любого человека с хорошим уровнем абстрактного мышления разработка такого провайдера не является такой уж сложной задачей, какой ее многие считают.Я разработал один, который используется в производственной среде, примерно за 3 месяца работы неполный рабочий день (имеется в виду несколько вечеров и выходных).С самого начала он был нацелен на повышение производительности и приведение в порядок SQL – и эта цель была достигнута.

Было немного трудно найти время для публикации этого материала, но я подумал – если это может кому-то помочь, то нет причин тратить этот опыт впустую:

Я создал проект 'Ссылка на Что угодно' который разработан для того, чтобы очень-очень легко реализовать (простой) Поставщик Linq.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top