Здравствуйте, _FRED_, Вы писали:
_FR>Имеется в виду возможность такого псевдокода:
Это Sql Builder pattern. В BLToolkit этот класс называется SqlQuery.
_FR>То есть создание некоего объекта (по сути AST) и дальнейшая возможность трансляции его в SQL для различных СУБД.
Потом он скармливается конкретному SqlProvider и тот строит по нему запрос.
_FR>То есть объектная модель должна поддерживать common table expressions / оконные функции (с атрибутами PARTITION BY / ORDER BY) и прочие "изыски".
Прямой поддержки WITH нет, хотя некоторые провайдеры строят SQL с использованием WITH для некоторых конструкций, например, для пейджинга.
_FR>Быть удобной для сложных манипуляций при построении и изменении объекта-запроса.
Удобным для сложных манипуляций может быть только паттерн-матчинг. Всё остальное — закат солнца в ручную.
_FR>Ага, вот меня по примерам и подкупила возможность в пользовательском коде вносить расширения (ну так мне по примерам показалось что такая возможность есть для функций / подвыражений).
На уровне выражений уже сейчас можно расширяться куда угодно. Сейчас переписывается парсер линк выражений и тогда появится возможность расширяться на уровне цепочки методов, например, добавлять свои методы вроде LeftJoin и т.п.
Если нам не помогут, то мы тоже никого не пощадим.