2011-11-15 15 views
7

मैंने पिछले 2 दिनों में यह पता लगाने की कोशिश की है कि LINQ में वास्तविक बाएं जॉइन कैसे करें और मैं सफल नहीं हुआ हूं। मेरे पास एक उपयोगकर्ता तालिका है जिसमें "प्राथमिक 2 एड्रेस" कॉलम है जो अक्सर और अक्सर नल हो सकता है। इसलिए मुझे यहां एक बाएं जॉइन करना है। इसके अलावा, पता तालिका में, मेरे पास अधिक रिश्ता है जो पूर्ण हो सकता है, इसलिए मुझे कई बाएं जॉइन करना है।
प्रत्येक LINQ प्रयास मैं यूनियनों, नेस्टेड चयन कथन और अधिक निराशाजनक चीज़ों के साथ कुछ गंभीर क्रैजी एसक्यूएल स्टेटमेंट आउटपुट करता हूं।
सभी मैं की जरूरत है:LINQ से इकाइयों में बाएं जॉइन कैसे करें?

SELECT u.UserName FROM Users u 
LEFT JOIN Addresses a ON a.AddressiD = u.Primary2Address 
LEFT JOIN States s ON s.StateID = a.Address2State 
LEFT JOIN Countries c ON c.CountryID = a.CountryID 

कृपया मदद! अभी तक मेरा काम-आसपास एक संग्रहित प्रक्रिया बनाना था जो ऊपर मेरे एसक्यूएल कथन का उपयोग करता है, लेकिन मैं वास्तव में LINQ (L2E) के साथ ऐसा करने का प्रयास करना चाहता हूं। धन्यवाद दोस्तों!

+3

कैसे आपकी क्वेरी बस से भिन्न क्यों है 'से उपयोगकर्ताओं को u' u.UserName चयन EntityFramework 4 के लिए मिलती है? – svick

उत्तर

18

DefaultIfEmpty बाईं के लिए प्रयोग किया जाता है

var query = from u in context.Users 
      from a in context.Addresses 
          .Where(x => u.Primary2Address == x.AddressiD) 
          .DefaultIfEmpty() 
      from s in context.States 
          .Where(x => a.Address2State == x.StateID) 
          .DefaultIfEmpty() 
      from c in context.Countries 
          .Where(x => a.CountryID == x.CountryID) 
          .DefaultIfEmpty() 
      select u.UserName; 
+0

आप मेरे नायक हैं! वाह, इतने घंटों के बाद .... आपकी क्वेरी सीधे आगे बढ़ती है क्योंकि वे आते हैं और मुझे अब मिलती है। धन्यवाद लाखों Aducci! – Losbear

+0

प्रश्न पर @ svick की टिप्पणी के अनुसार, यह संदर्भ में 'आप से अलग कैसे है। उपयोगकर्ता यू.यूसरनाम' का चयन करते हैं? – AakashM

+0

@AakashM - यदि किसी भी उपयोगकर्ता के पास एकाधिक पते हैं तो आपको एक अलग परिणाम मिलेगा। सबसे महत्वपूर्ण बात यह है कि मुझे लगता है कि सवाल सरलीकृत किया गया है। – Aducci

संबंधित मुद्दे