2009-08-04 11 views
0

Ich habe versucht, für ein paar Tage zu schreiben, um diese Abfrage in LINQ "ohne Erfolg" zu "übersetzen". Könnt ihr mir bitte helfen? Ich würde auch eine Erklärung schätzen, um etwas daraus zu lernen.Unterabfragen in linq

ist die T-SQL-Abfrage:

SELECT R.ResourceID, R.DefaultValue 
FROM Resources as R 
JOIN 
    (SELECT [t0].[NameResourceID] AS [ResourceID] 
    FROM [dbo].[Sectors] AS [t0] 
    LEFT OUTER JOIN [dbo].[LocalizedResources] AS [t1] ON [t0].[NameResourceID] = [t1].[ResourceID] and [t1].[LanguageID] = 2 
    WHERE t1.Value IS NULL) AS subQ 

ON R.ResourceID = subQ.ResourceID 

+0

Warum Sie "joining" zu diesem SubQ ... du bist ziehe keinen einzigen Wert heraus. Das sollte eine WHERE-Klausel sein, da Sie sie nur zum Filtern verwenden. Das ist wahrscheinlich der Grund, warum es dir schwer fällt, es zu übersetzen. –

+0

Ich brauche nur die IDs dieser Einträge von subQ. Tatsächlich benutze ich es nur zum Filtern. Ich konnte einfach keine bessere Lösung finden. Hast du irgendwelche Vorschläge? Grundsätzlich versuche ich alle Ressourcen zu finden, die nicht in der Sprache X lokalisiert waren und dann zu sehen, ob es irgendwelche Sektoren unter ihnen gibt. –

Antwort

0

die Thank versuchen, etwas wie folgt aus:

from r in db.Resources 
join subQ in (from t0 in db.Sectors 
       join t1 in db.LocalizedResources on t0.NameResourceID equals t1.ResourceID 
       where t1.LanguageId 
       && t1.Value == null 
       select new { ResourceID = t0.NameResourceID }) on r.ResourceID equals subQ.ResourceID 
select new { r.ResourceId, r.DefaultValue }; 
+0

Leider funktioniert das nicht. Es wird in TSQL Übersetzung:... SELECT [t0] [ResourceID], [t0] [Default] FROM [dbo] [Ressourcen] AS [t0] INNER JOIN \t ([dbo] [Branchen. ] AS [t1] INNERE VERBINDUNG [dbo]. [LokalisierteRessourcen] AS [t2] EIN [t1]. [NameResourceID] = [t2]. [RessourcenID]) EIN [t0]. [RessourcenID] = [t1]. [ NameResourceID] WHERE 0 = 1 Ich habe versucht, es zu ändern, aber ich könnte nicht besser werden. –