2013-01-05 23 views
1

是否可以使用表t-sql表值用戶定義的函數作爲HQL查詢的一部分?使用nhibernate t-sql表值用戶定義函數

這裏Nhibernate filtering by user defined function output是一個例子,如何創建自定義方言extention但是在這個示例標量UDF使用。

讓我們假設我有以下的T-SQL UDT

CREATE FUNCTION [dbo].[getSuitableProjects] 
(
    @userID INT 
) 
RETURNS @result TABLE 
( 
    ProjectID INT 
) 
AS 
-- body of the function .. 

我希望能夠編寫以下HQL - 第二行是僞代碼,只是我想引用我的功能HQL查詢的一部分 - 真正的查詢更復雜,它有取指點等。

StringBuilder hql = new StringBuilder(); 
hql.AppendLine("select p from Projects p WHERE p.ProjectID IN"); 
hql.AppendLine("(run with parameter -> getSuitableProjects(:userID))"); 

IQuery q = UOW.Session.CreateQuery(hql.ToString()); 
q.SetInt32("userID", userID); 

我花了一些時間尋找答案,但沒有結果。可能嗎 ?
先謝謝您。

+0

我有一個疑問類同你的,有這樣的鏈接看看http://stackoverflow.com/questions/30812235/select-from-table-valued-function-nhibernate – rcarvalhoxavier

回答

0

不,你不能使用HQL表值函數。

使用SQL(CreateSQLQuery(...))來代替。

0

也許有人會發現它有用,我有以下查詢

var query = UOW.Session.QueryOver<Project>(); 
query = query.Where(...) //where citeria which can be expressed in QueryOver 
query = query.Fetch(z => z.Items).Eager.TransformUsing(Transformers.DistinctRootEntity); 

var criteria = query.UnderlyingCriteria 
.Add(Expression.Sql("{alias}.ID IN (SELECT ProjectID FROM dbo.getSuitableProjects(12))")) 

我的目標是有預裝的項目(z.Items),並同時放限制到僅可那些項目結束爲用戶 - >這個邏輯坐在我的表值UDF。