С DSl дело в том, что они редко бывают эффективными в изоляции. Чтобы быть полезным для написания реального программного обеспечения, вам действительно нужно иметь возможность встраивать DSL в язык хоста. Сравните, например, то, как работает Linq против простого SQL. Другим хорошим примером является функция XML-литерала в VB. И то, и другое позволяет вам писать настоящий код на PL общего назначения и переплетать его с более простым декларативным кодом DSL.
В результате получается нечто гораздо более мощное, чем отдельный SQL или простой редактор XML.
Недостатком этого, к сожалению, является то, что ни C #, ни VB не предлагают никаких функций метапрограммирования, поэтому единственный способ сделать это для основных разработчиков .net - это создать свой собственный язык. Если это то, что вы делаете просто для удовольствия, вы можете изменить моно-компилятор C #, чтобы добавить интересующие вас функции в язык. Другой альтернативой может быть попытка рубина. Он имеет гибкий синтаксис, который позволит вам избежать сумасшествия. Лично я предпочел бы взломанный подход C #.