2016-03-31 8 views
7

My SQL-Abfrage wie unten adaequat in SQL ist ich diese Syntax zu LINQ müssen konvertierenSQL Query zu LINQ-Syntax nicht existieren verwendet und kommen

SQL-

SELECT [Key], Id 
FROM LocalizationKeys AS lk 
WHERE NOT EXISTS (SELECT 1 
        FROM Languages AS l 
        JOIN LocalizationValues AS lv ON l.Id = lv.LanguageId 
        WHERE l.Title = 'en-US' AND lv.LocalizationKeyId = lk.Id) 

LINQ-Syntax habe ich versucht,

var result = 

(from lk in localizationKey  
where !(from l in lang 
     join lv in localizationValue on l.Id equals lv.LanguageId 
     where l.Title == "en-US" && lv.LocalizationKeyId == lk.Id select 1).FirstOrDefault() 

select lk).ToList(); 

Erste Fehler:

Operator '!' cannot be applied to operand of type 'int'

Irgendwelche Anhaltspunkte, wo ich Fehler gemacht habe?

Antwort

1

Sie mögen dieses versuchen:

(from lk in localizationKey  
where (from l in lang 
     join lv in localizationValue on l.Id equals lv.LanguageId 
     where (l.Title == "en-US" && lv.LocalizationKeyId == lk.Id) 
     select l).FirstOrDefault() == null 
select lk).ToList(); 

oder

(from lk in localizationKey  
where !(from l in lang 
     join lv in localizationValue on l.Id equals lv.LanguageId 
     where !(l.Title == "en-US" && lv.LocalizationKeyId == lk.Id) 
     select l).FirstOrDefault().Any() 
select lk).ToList(); 
+0

es sollte die entgegengesetzte Logik im ersten Beispiel sein 'FirstOrDefault() == null' und –

+0

bekommen - Ein Abfragekörper muss mit einer Select-Klausel oder einer Gruppenklausel enden – Neo

+0

check my edit @Neo –

1

Try this:

(from lk in localizationKey  
where (from l in lang 
     join lv in localizationValue on l.Id equals lv.LanguageId 
     where !(l.Title == "en-US" && lv.LocalizationKeyId == lk.Id) select 1).FirstOrDefault() 

select lk).ToList(); 
+0

Kann den Typ 'int' nicht implizit in 'bool' umwandeln – Neo

+0

Ich denke, das Problem ist, dass ich Tabellenwerte innerhalb der var-Variablen nehme, weshalb es falsch sein kann? irgendeine Ahnung ? Ich bekomme alle localizationKey Werte als Ausgabe – Neo

1

Ich denke, Ihre ursprüngliche Abfrage ist in Ordnung, die Sie gerade ein anderes Paar hinzufügen müssen Klammern in der Where-Klausel:

(from lk in localizationKey  
    where !((from l in lang 
     join lv in localizationValue on l.Id equals lv.LanguageId 
     where l.Title == "en-US" && lv.LocalizationKeyId == lk.Id select 1).Any()) 
select lk).ToList(); 
+0

Ich denke, Problem ist, ich nehme Tabellenwerte innerhalb var Variable das ist warum kann es falsch sein? irgendein Hinweis? Ich bekomme alle LokalisationKey Werte als Ausgabe – Neo

+0

Dann ist wahrscheinlich das Problem mit Ihrem SQL-Abfrage. Ich nehme an, dass es das gleiche Ergebnis zurückgibt –