Моя первоначальная мысль заключается в том, что создание чего-то подобного не слишком разумно. Вы пишете код, который генерирует HQL. Который, в свою очередь, передается в nhibernate, который генерирует SQL.
Я бы посоветовал взглянуть на NHibernate критерий запросов. Во-первых, как более простой способ динамического построения запроса NHibernate. Но также для того, чтобы дать вам некоторое представление о том, насколько сложным может быть ваш собственный динамический построитель запросов.
Это сказал. Если бы я делал это, я бы, вероятно, использовал бы критерии NHibernate в качестве основы для любого вида динамического построителя запросов. Нет причин, по которым он не может сгенерировать запрос для использования другим ORM.
Более общее решение проблемы состоит в том, чтобы абстрагировать ваш доступ к данным, так что если вы хотите переключить ORM, вам нужно всего лишь изменить код вашей абстракции. Конечно, это больше работы, но я не уверен, что сохранение кода доступа к данным ORM независимым является особенно важным.