1

テーブル t-sql テーブル値ユーザー定義関数を HQL クエリの一部として使用することは可能ですか?

ここで、ユーザー定義関数の出力による Nhibernate フィルタリングは、カスタム方言拡張を作成する方法の例ですが、この例ではスカラー UDF が使用されています。

次の t-sql UDT があると仮定しましょう

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

次のhqlを記述できるようにしたいと思います-2行目は疑似コードです。単に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);

答えを探すのに時間を費やしますが、結果はありません。出来ますか ?
前もって感謝します。

4

2 に答える 2

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 にあります。

于 2013-01-06T18:29:15.687 に答える
0

いいえ、HQL でテーブル値関数を使用することはできません。

CreateSQLQuery(...)代わりにSQL ( ) を使用してください。

于 2013-01-06T00:51:57.387 に答える