2011-07-12 14 views

cevap

19

Sen LEFT JOIN için DefaultIfEmpty() ihtiyaç katıldı değer null ise, o zaman kontrol edebilirsiniz

var result = from a in Table_A 
      where !Table_B.Any(b => b.Key == a.key) 
      select new { ... }; 
12

böyle yazmak olacaktır:

SELECT <select_list> 
FROM Table_A A 
LEFT JOIN Table_B B 
ON A.Key = B.Key 
WHERE B.Key IS NULL 
+0

SQL deyimini dahlbyk'in yanıtı olarak optimize edilmiş mi? –

+0

Daha da iyi bir performansa sahip olacak. SQL kodunda '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'EX generate EX EX NOT NOT generate generate generate – Magnus

+0

Kesin bir ifadeyle, '' '' '' ''' 'LEFT JOIN'''' ile' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'performansının, söz konusu veritabanının yapısına bağlı olduğu - emin olmak için yürütme planlarını kontrol edin. LINQ to Objects'de, birleştirme, her bir "Any()" için tabloyu taramak yerine bir kez "Table_B" araması oluşturduğundan daha iyi performans gösterecektir; bir SQL motoru, benzer bir uygulamayı makul bir şekilde kullanabilir. – dahlbyk

1

Daha da hızlı bir şekilde

var result = from a in Table_A 
    where !Table_B.Select(b => b.Key).Contains(a.Key) 
    select new { ... }; 
İlgili konular