LINQ का उपयोग कर बाएं बहिष्कृत जॉइन कैसे प्राप्त करें?LINQ का उपयोग कर बाएं बहिष्कृत जॉइन कैसे प्राप्त करें?
SQL में:
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
LINQ का उपयोग कर बाएं बहिष्कृत जॉइन कैसे प्राप्त करें?LINQ का उपयोग कर बाएं बहिष्कृत जॉइन कैसे प्राप्त करें?
SQL में:
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
आप 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 { ... };
आसान इस तरह लिखने के लिए होगा:
var result = from a in Table_A
where !Table_B.Any(b => b.Key == a.key)
select new { ... };
एक तेज़ तरीका
var result = from a in Table_A
where !Table_B.Select(b => b.Key).Contains(a.Key)
select new { ... };
क्या इसका एसक्यूएल कथन डहलबीक के उत्तर के रूप में अनुकूलित है? –
इसमें बेहतर प्रदर्शन भी होगा। यह SQL कोड में 'EXISTS' उत्पन्न नहीं करेगा। – Magnus
कड़ाई से बोलते हुए, 'EX EXSTS 'बनाम' बाएं जॉइन 'का प्रदर्शन प्रश्न में डेटाबेस की संरचना पर निर्भर करता है - सुनिश्चित करने के लिए निष्पादन योजनाओं की जांच करें। LINQ से ऑब्जेक्ट्स में, जॉइन बेहतर प्रदर्शन करेगा क्योंकि यह प्रत्येक 'Any()' के लिए तालिका स्कैन करने के बजाय 'Table_B' का एक लुकअप बनाता है - एक एसक्यूएल इंजन उचित रूप से इसी तरह के कार्यान्वयन का उपयोग कर सकता है। – dahlbyk