2012-07-25 90 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?

相關問題