2016-03-31 14 views
7

mia query SQL è come qui di seguito a lavorare bene in SQL ho bisogno di convertire questo per la sintassi LINQquery SQL per la sintassi LINQ utilizzando non esiste e unisciti

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) 

sintassi LINQ ho provato

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

Ottenere errore:

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

Qualsiasi indizio su cui ho fatto errore?

risposta

1

si può provare in questo modo:

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

o

(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

dovrebbe essere la logica opposta nel primo esempio 'FirstOrDefault() == null' e –

+0

get - Un corpo della query deve terminare con una clausola select o una clausola group – Neo

+0

check my edit @Neo –

1

Prova questo:

(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

Impossibile convertire in modo implicito il tipo 'int' in 'bool' – Neo

+0

Penso che il problema è che sto prendendo i valori della tabella all'interno della variabile var thats perché potrebbe essere sbagliato? qualche indizio? Sto ottenendo tutti i valori di localizationKey come output – Neo

1

Credo che la vostra query originale va bene basta aggiungere un altro paio di parentesi nella clausola where:

(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

Penso che il problema è che sto prendendo i valori della tabella all'interno della variabile var thats perché potrebbe essere sbagliato? Ogni indizio? Sto ottenendo tutti i valori di localizationKey come output – Neo

+0

Quindi molto probabilmente il problema è con il tuo sql query. Suppongo che restituisca lo stesso risultato –

Problemi correlati