मैं ग्राहकों और उनके वैकल्पिक मुख्य पते (ग्राहक के पास शून्य या अधिक पते हो सकते हैं) प्राप्त करने के लिए एक लिंक क्वेरी का उपयोग कर रहा हूं। वस्तु पदानुक्रम इस प्रकार है:लिंक क्वेरी NullReferenceException एकाधिक (कैस्केड) पर छोड़ दिया
- ग्राहक
- CustomerAddress
- पता
- CustomerAddress
इस क्वेरी मैं है (बूलियन संपत्ति मुख्य शामिल हैं) मैं उपयोग कर रहा हूँ :
var qry = from customer cus in GetDBContext(c).customer
join cusadd in GetDBContext(c).customeraddress on new { cus_code = cus.cus_code, main = "1" } equals new { cus_code = cusadd.cus_code, main = cusadd.Main_addr } into grpcusadd
from cusadd in grpcusadd.DefaultIfEmpty()
join add in GetDBContext(c).address on new { addr_code = cusadd.Addr_Code } equals new { addr_code = add.Addr_Code } into grpadd
from add in grpadd.DefaultIfEmpty()
select new { cus, cusadd, add };
var customers = qry.ToList();
जब मैं इसे डेटाबेस (ईएफ के माध्यम से) निष्पादित करता हूं तो यह मान सही ढंग से देता है। जब मैं इसे मेमोरी ऑब्जेक्ट्स के साथ एक मॉकिंग संदर्भ पर निष्पादित करता हूं, तो मुझे NullReferenceException मिलता है: ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं होता है।
मैं में शामिल होने क्योंकि पहली बाईं रिटर्न में शामिल होने के शून्य मान दूसरा बाएं भाग में स्थित एक अशक्त मान को चेक करके इस त्रुटि को ठीक करने में सक्षम था:
join add in GetDBContext(c).address on new { addr_code = cusadd == null ? null : cusadd.Addr_Code } equals new { addr_code = add.Addr_Code } into grpadd
मैं एक ही निष्कर्ष के साथ एक ऐसे ब्लॉग पोस्ट पाया है लेकिन कोई स्पष्टीकरण नहीं: http://technologycraftsmen.net/blog/2010/04/14/multiple-outer-joins-in-linq-to-sql/
यह क्वेरी स्थानीय ऑब्जेक्ट्स पर क्यों विफल होती है, न कि डेटाबेस पर?
बाएं बाहरी बाएं कोनेड को हमेशा लिंक में इस तरह लिखा जाना चाहिए?
आपकी प्रतिक्रिया के लिए धन्यवाद!
आपके उत्तर के लिए धन्यवाद! निष्कर्ष: यदि लिंक क्वेरी डेटाबेस और सीएलआर दोनों में निष्पादित की जाएगी, तो क्वेरी दोनों मामलों के साथ मुद्दों को संभालना चाहिए। शून्य प्रचारक ऑपरेटर वास्तव में क्लीनर कोड प्रदान कर सकता है। –
ग्रेट उत्तर, मैंने मेमोरी प्रस्तुति में दिए गए परीक्षण के साथ इसे स्वयं में चलाया है। कठिनाई यह सुनिश्चित कर रही है कि आप किसी विधि या ऑपरेटर का उपयोग न करें जो डेटाबेस के लिए अनुवाद योग्य नहीं है, अन्यथा यह डेटाबेस से अधिक फेंकने या वापस करने को समाप्त कर देगा, फिर उम्मीद है कि फिर फ़िल्टर फ़िल्टर पर सीएलआर कोड चलाएगा। –