我需要返回按复杂逻辑过滤和排序的记录。 我计划在数据库端进行排序和过滤(函数或存储过程)。
是否可以使用QueryOver或Criteria语法调用过程或函数以过滤查询?
类似于下面显示的代码,其中CallProcedure - 调用我的过程/函数
var articles = Session.QueryOver<ArticleData>()
.Where(x => x.CompanyId == 1)
.CallProcedure???
.Skip(startIndex)
.Take(number).List();
感谢您的帮助。
答案 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?