Недавно у меня возникла необходимость написать свободный интерфейс для C#, который по существу будет зеркальным отражением SQL. Да, я знаю о LINQ to SQL, но мне интересно подойти «ближе к металлу» - иметь что-то, что по существу предоставляет не что иное, как прокладку Intellisensified SQL в пределах C#.
Например.,
var fq = new FluentQuery();
Expression<Action> =
() => fq.SELECT.DISTINCT(Foo.ID).FROM(Foo).WHERE(Foo.Age > 22);
Теперь я подумал, что эту концепцию можно обобщить - то есть, как насчет общего EBNF для генератора свободного интерфейса? Кто-нибудь знает, существует ли такой зверь?





Мне это нравится, но вы должны обязательно возвращать такие типы, как HasFromAndSelect или что-то в этом роде, чтобы не получить fq.SELECT(Foo.ID).SELECT(Foo.Age).WHERE(Foo.Age > 22) или fq.WHERE(Foo.Age > 22).SELECT(Foo.ID) и т. д.
Об этом нужно подумать гораздо больше, в том числе о том, что РЕЖИМ CAPS LOCK MODE болит мне глаза :)
Caps Lock является преднамеренным - служит для визуальной дифференциации внутреннего DSL, который вы используете; плюс, SQL обычно канонически указывается заглавными буквами.
Если вы хотите это сейчас, поищите в "Micro ORM" несколько вариантов.