0

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

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

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

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

感谢帮助。

4

1 回答 1

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();

类似的东西。不确定您是否可以同时使用它进行过滤和排序。也许数据库视图更适合这种情况。

一些帮助您入门的链接:
我可以在 NHibernate QueryOver 中使用 SQL 函数吗?
NHibernate QueryOver SQLFunction in where 子句
NHibernate 的 QueryOver 语法可以选择 SqlFunction 的 MAX() 吗?

于 2012-07-25T09:33:35.187 回答