2011-07-12 14 views

उत्तर

19

आप LEFT JOIN के लिए DefaultIfEmpty() की जरूरत है, तो आप देख सकते हैं कि शामिल हो गए मूल्य null है:

var result = from a in Table_A 
      join b in Table_B on a.Key equals b.Key into j 
      from b in j.DefaultIfEmpty() 
      where b == null 
      select new { ... }; 
12

आसान इस तरह लिखने के लिए होगा:

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

क्या इसका एसक्यूएल कथन डहलबीक के उत्तर के रूप में अनुकूलित है? –

+0

इसमें बेहतर प्रदर्शन भी होगा। यह SQL कोड में 'EXISTS' उत्पन्न नहीं करेगा। – Magnus

+0

कड़ाई से बोलते हुए, 'EX EXSTS 'बनाम' बाएं जॉइन 'का प्रदर्शन प्रश्न में डेटाबेस की संरचना पर निर्भर करता है - सुनिश्चित करने के लिए निष्पादन योजनाओं की जांच करें। LINQ से ऑब्जेक्ट्स में, जॉइन बेहतर प्रदर्शन करेगा क्योंकि यह प्रत्येक 'Any()' के लिए तालिका स्कैन करने के बजाय 'Table_B' का एक लुकअप बनाता है - एक एसक्यूएल इंजन उचित रूप से इसी तरह के कार्यान्वयन का उपयोग कर सकता है। – dahlbyk

1

एक तेज़ तरीका

var result = from a in Table_A 
    where !Table_B.Select(b => b.Key).Contains(a.Key) 
    select new { ... }; 
संबंधित मुद्दे