Да. Это возможно.
Посмотрите:
http://ayende.com/Blog/archive/2006/10/01/UsingSQLFunctionsInNHibernate.aspx
Вы могли бы сделать что-то вроде этого:
public class MyDialect : PostgreSQLDialect
{
public MyDialect()
{
RegisterFunction("dbo.myfunction", new
StandardSQLFunction(NHibernateUtil.String));
}
}
Тогда вы можете использовать myfunction
в своих инструкциях HQL. Вам просто нужно зарегистрировать диалект в вашей конфигурации NH.
Edit:
Хорошие новости, это должно работать и для запросов Criteria.
Это код (из Reflector) в PostgreSQLDialect
base.RegisterFunction("iif",
new SQLFunctionTemplate(null, "case when ?1 then ?2 else ?3 end"));
Так что в вашей ICriteria вы могли бы сделать:
Projections.SqlFunction("iif", NHibernateUtil.Boolean, foo, bar, baz...
Все это должно работать, потому что вы расширяете диалект NH.
НТН