2013-04-12 5 views
5

私は私のLINQクエリのインラインテーブル値関数を使用してテーブルを外部結合しようとしていますが、私は、実行時にクエリのコンパイルエラーが表示されます:Entity Frameworkの5:にどのように外部結合表値関数

"クエリはネストされたクエリで 'OuterApply'を呼び出そうとしましたが、 'OuterApply'には適切なキーがありませんでした。

私のLINQ文は次のようになります。

 var testQuery = (from accountBase in ViewContext.AccountBases 

         join advisorConcatRaw in ViewContext.UFN_AccountAdvisorsConcatenated_Get() 
           on accountBase.AccountId equals advisorConcatRaw.AccountId into advisorConcatOuter 
         from advisorConcat in advisorConcatOuter.DefaultIfEmpty() 

         select new 
         { 
          accountBase.AccountId, 
          advisorConcat.Advisors 
         }).ToList(); 

次のように関数の定義は次のとおりです。

CREATE FUNCTION dbo.UFN_AccountAdvisorsConcatenated_Get() 
RETURNS TABLE 
AS 
RETURN 
    SELECT AP.AccountId, 
      LEFT(AP.Advisors, LEN(AP.Advisors) - 1) AS Advisors 
     FROM ( SELECT DISTINCT 
         AP.AccountId, 
         ( SELECT AP2.PropertyValue + ', ' 
          FROM dbo.AccountProperty AP2 WITH (NOLOCK) 
          WHERE AP2.AccountId = AP.AccountId 
          AND  AP2.AccountPropertyTypeId = 1 -- Advisor 
          FOR XML PATH('')) AS Advisors 
       FROM dbo.AccountProperty AP WITH (NOLOCK)) AP; 

私は成功し、次のようにSQLに直接結合を実行することができます

SELECT ab.accountid, 
     advisorConcat.Advisors 
FROM accountbase ab 
     LEFT OUTER JOIN dbo.Ufn_accountadvisorsconcatenated_get() advisorConcat 
        ON ab.accountid = advisorConcat.accountid 

誰かが左外側のインライン結合の実例を持っていますかTVFをLINQのテーブルにエンティティに - またはこれは既知の欠陥などですか?どうもありがとう。

+0

同じ問題、解決策はありますか? –

+0

まだMicrosoftからの返信はありません - この問題はEFの次のバージョンで修正される予定ですか? –

答えて

1

Entity Frameworkは、TVF結果の主キー列が左結合を行うかどうかを知る必要があります。基本的には、TVF結果と同じスキーマを持ち、モデルブラウザでTVFを更新する偽のテーブルを作成して、デフォルトの複合タイプの代わりに新しい作成されたテーブルタイプを返す必要があります。詳細はthis answerを参照してください。

関連する問題