【问题标题】:Call procedure or function as part of Hibernate query调用过程或函数作为 Hibernate 查询的一部分
【发布时间】:2012-07-25 17:33:35
【问题描述】:

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

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: sql nhibernate


    【解决方案1】:

    首先,您需要通过创建自定义方言向 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?

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 2010-12-11
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 2017-11-09
      • 2015-12-30
      • 2012-12-29
      • 1970-01-01
      相关资源
      最近更新 更多