2012-07-25 89 views
0

我需要返回按复杂逻辑进行过滤和排序的记录。 我打算在数据库端进行排序和筛选(函数或存储过程)。作为Hibernate查询的一部分调用过程或函数

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

类似下面所示的代码,其中CallProcedure - 叫我的过程/函数

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

感谢您的帮助。

回答

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?

相关问题