4

我有一個問題可以問你,親愛的社區,你可能已經猜到了。所以。 我希望NHibernate根據對錶值sql函數的評估過濾查詢結果。通過NHibernate的產生 可能的SQL查詢可能類似於如下:我可以在NHibernate中使用表值函數作爲查詢源嗎?

SELECT 
    [whatever] 
FROM 
    [whatever] 
    INNER JOIN dbo.FnMyTableValuedFunction() as MyAlias ON 
     [whatever].FirstDesiredKey = MyAlias.FirstDesiredKey 
     AND 
     [whatever].SecondDesiredKey = MyAlias.SecondDesiredKey 

或者也可以這樣寫:

SELECT 
    [whatever] 
FROM 
    [whatever] 
WHERE 
    EXISTS(
     SELECT 
      1 
     FROM 
      dbo.FnMyTableValuedFunction() AS MyAlias 
     WHERE 
      [whatever].FirstDesiredKey = MyAlias.FirstDesiredKey 
      AND 
      [whatever].SecondDesiredKey = MyAlias.SecondDesiredKey 
    ) 

這樣的查詢我想用標準的API生成。 據我所知,沒有辦法告訴NHibernate它應該加入什麼以及如何加入。所以可能存在的一個解決方案是第二個。
不幸的是,我沒有足夠的幸運瞭解如何使用表值函數作爲相關子查詢的查詢源。你能幫助我嗎?

回答

0

除SQL以外的所有NHibernate查詢方法(HQL,Criteria,Linq,QueryOver)都適用於實體,而不適用於表格或任何其他數據庫工件。

因此,如果您使用的是Criteria,則需要將FnMyTableValuedFunction映射到實體,或將SQLCriterion用於任意SQL塊。

與後者,是的,EXISTS可能是要走的路。您可以將整個條件(包括EXISTS)包含在SQLCriterion中。

0

您可能可以將自定義方法添加到派生SQLDialect中,並在條件中使用該方法,然後查看所有Dialects繼承的NHibernate.Dialect.Dialect中的RegisterFunction

相關問題