2013-04-12 12 views
5

Ich versuche, eine Tabelle mit einer Inline-Tabellenwertfunktion in meiner LINQ-Abfrage zu Outer-Joins, aber ich habe einen Abfrage Übersetzungsfehler zur Laufzeit:Entity Framework 5: Wie Outer Join Tabellenwertfunktion

" Die Abfrage hat versucht, 'OuterApply' über eine verschachtelte Abfrage aufzurufen, 'OuterApply' verfügt jedoch nicht über die entsprechenden Schlüssel. "

Meine Linq-Anweisung sieht wie folgt aus:

 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(); 

Die Funktionsdefinition lautet wie folgt:

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; 

Ich kann die Verbindung direkt in SQL erfolgreich wie folgt durchführen:

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

Hat jemand ein Arbeitsbeispiel von linker äußerer Verbindung einer Inline TVF zu einer Tabelle in LINQ an Entitäten - oder ist das ein bekannter Defekt, etc? Danke vielmals.

+0

Haben Sie das gleiche Problem, irgendeine Lösung? –

+0

Immer noch keine Antwort von Microsoft - wird dieses Problem in der nächsten Version von EF behoben? –

Antwort

1

Entity Framework muss wissen, wie die Primärschlüsselspalten der TVF-Ergebnisse einen Linksbündig machen. Grundsätzlich müssen Sie eine falsche Tabelle erstellen, die dasselbe Schema wie Ihre TVF-Ergebnisse hat, und TVF im Modellbrowser aktualisieren, um den neu erstellten Tabellentyp anstelle des standardmäßigen komplexen Typs zurückzugeben. Sie können sich auf this answer beziehen, um weitere Details zu erhalten.