调用过程或函数作为Hibernate查询的一部分

时间:2012-07-25 09:07:19

标签: sql nhibernate

我需要返回按复杂逻辑过滤和排序的记录。 我计划在数据库端进行排序和过滤(函数或存储过程)。

是否可以使用QueryOver或Criteria语法调用过程或函数以过滤查询?

类似于下面显示的代码,其中CallProcedure - 调用我的过程/函数

var articles = Session.QueryOver<ArticleData>()
    .Where(x => x.CompanyId == 1)
    .CallProcedure???
    .Skip(startIndex)
    .Take(number).List();

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

首先,您需要通过创建自定义方言注册您的NHibernate函数:

public class MyDialect : MsSqlServer2008Dialect
{
    public MyDialect() 
    {
        RegisterFunction("myfunction", new SQLFunctionTemplate(...));
    }
}

之后,您可以在查询中使用该功能:

var articles = Session.QueryOver<ArticleData>()
    .Where(x => x.CompanyId == 1)
    .Where(Projections.SqlFunction("myfunction", ...))
    .Skip(startIndex)
    .Take(number).List();

这些方面的东西。不知道你是否能够同时使用它进行过滤和排序。也许database view更适合这种情况。

一些帮助您入门的链接:
Can I use SQL functions in NHibernate QueryOver?
NHibernate QueryOver SQLFunction in where clause
Can NHibernate's QueryOver syntax select MAX() of an SqlFunction?