扩展NHibernate以支持聚合函数
是否可以扩展NHibernate以添加对数据库系统特有的聚合函数的支持?我有一些查询使用PostgreSQL中的array_agg()函数(以及其他函数),我想将其转换为HQL/ICriteria 谢谢 是的。这是可能的 看一看: 你可以这样做:扩展NHibernate以支持聚合函数,nhibernate,postgresql,Nhibernate,Postgresql,是否可以扩展NHibernate以添加对数据库系统特有的聚合函数的支持?我有一些查询使用PostgreSQL中的array_agg()函数(以及其他函数),我想将其转换为HQL/ICriteria 谢谢 是的。这是可能的 看一看: 你可以这样做: public class MyDialect : PostgreSQLDialect { public MyDialect() { RegisterFunction("dbo.myfunctio
public class MyDialect : PostgreSQLDialect
{
public MyDialect()
{
RegisterFunction("dbo.myfunction", new
StandardSQLFunction(NHibernateUtil.String));
}
}
然后可以在HQL语句中使用myfunction
。您只需要在NH配置中注册方言
编辑:
好消息是,这也适用于条件查询
这是PostgreSql方言中的代码(来自Reflector)
base.RegisterFunction("iif",
new SQLFunctionTemplate(null, "case when ?1 then ?2 else ?3 end"));
因此,在您的ICriteria中,您可以:
Projections.SqlFunction("iif", NHibernateUtil.Boolean, foo, bar, baz...
所有这些都应该有效,因为您正在扩展NH方言
HTH这是否意味着我仅限于HQL?我想我可以把它和iCiteria结合起来。不,不,它也应该和标准一起工作。我会更新我的答案。