2016-03-31 20 views
7

truy vấn SQL của tôi là như dưới đây làm việc tốt trong SQL tôi cần phải chuyển đổi này để cú pháp LINQSQL Query để cú pháp LINQ sử dụng không tồn tại và tham gia

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) 

cú pháp LINQ Tôi cố gắng

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

Bắt lỗi:

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

Bất kỳ đầu mối nào mà tôi đã phạm sai lầm?

Trả lời

1

Bạn có thể thử như thế này:

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

hoặc

(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

nó phải là logic ngược lại trong ví dụ đầu tiên 'FirstOrDefault() == null' và –

+0

nhận được - Một truy vấn phải kết thúc bằng mệnh đề select hoặc mệnh đề nhóm – Neo

+0

kiểm tra chỉnh sửa của tôi @Neo –

1

Hãy thử điều này:

(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

Không thể chuyển đổi hoàn toàn loại 'int' sang 'bool' – Neo

+0

Tôi nghĩ rằng vấn đề là tôi đang lấy giá trị bảng bên trong biến var thats tại sao có thể là sai? bất kỳ đầu mối? Tôi nhận được tất cả các giá trị localizationKey như là một đầu ra – Neo

1

Tôi nghĩ rằng câu hỏi ban đầu của bạn là tốt, bạn chỉ cần thêm một cặp dấu ngoặc trong mệnh đề 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

Tôi nghĩ rằng vấn đề là tôi đang dùng giá trị bảng bên trong var biến thats tại sao có thể nó là sai? bất kỳ đầu mối? Tôi nhận được tất cả các giá trị localizationKey như là một đầu ra – Neo

+0

Sau đó hầu hết có lẽ vấn đề là với bạn Tôi cho rằng nó trả về kết quả tương tự –

Các vấn đề liên quan