के साथ स्वचालित संबंधों की स्वचालित रूप से जांच कर रहा है मैं उस एप्लिकेशन के लिए डेटाबेस क्वेरीिंग को संभालने के लिए LINQ से SQL का उपयोग कर रहा हूं, जिस पर मैं काम कर रहा हूं।LINQ क्वेरी
इस उदाहरण के प्रयोजनों के लिए, कल्पना मैं इतना
- Company
- Product
- Item
- Order
जैसे कुछ टेबल है और कहते हैं कि एक Company
0 या अधिक Products
है की सुविधा देता है, एक Product
0 या अधिक Items
है, और एक Item
0 है या अधिक Orders
।
अब तो मैं Orders
की एक सूची प्राप्त किया है की सुविधा देता है, कुछ की तरह:
IQueryable<Order> myOrders = GetMyOrders();
अब कहते हैं कि मैं एक विशेष Company.Name
के लिए आदेश क्वेरी, लेकिन एक स्थिति है जहां हर तालिका अभिभावक आईडी हो सकता है करना चाहते हैं NULL
(मैं जानता हूँ कि यह मेरा उदाहरण डेटा के साथ तार्किक नहीं लगता है, लेकिन यह सिर्फ एक उदाहरण है)
धारणा बनाना कोई NULL
माता पिता आईडी देखते हैं कि मैं यह कर सकता है:
var filteredOrders = myOrders.Where(x => x.Item.Product.Company.Name == "Company1");
यह ठीक काम करेगा, क्योंकि NULL
मूल आईडी मान हो सकते हैं, मुझे यह सुनिश्चित करने के लिए प्रत्येक पैरेंट ऑब्जेक्ट की जांच करनी होगी कि यह अगले माता-पिता से पूछताछ करने से पहले null
नहीं है (अन्यथा मुझे अपवाद मिलेगा)। इसलिए मैं कुछ ऐसा कार्य करें:
var filteredOrders = myOrders.Where(x =>
x.Item != null &&
x.Item.Product != null &&
x.Item.Product.Company != null &&
x.Item.Product.Company.Name == "Company1");
तो मेरे सवाल का: वहाँ एक बेहतर तरीका (पठनीयता और कोडिंग में आसानी के संदर्भ में) सभी रिक्त चेकों शामिल करने के लिए की तुलना में यह करने के लिए है? रास्ते में पाए गए किसी भी शून्य माता-पिता को परिणामस्वरूप सूची से बहिष्कार करना चाहिए।
कृपया अशक्त माता-पिता को रोकने के लिए कोई सुझाव नहीं, डेटाबेस नहीं बदलेंगे, (और वैसे भी पूरी तरह से वैध है)
और अधिक प्रदर्शन करने वाले के रूप में बेहतर पढ़ सकते हैं? मुझे ऐसा नहीं लगता। मैं वैसे भी नहीं सोच सकता कि आप उन सभी 'शून्य' चेक से खुद को छुटकारा पा सकते हैं। सुंदर कोड के रूप में बेहतर है? मैं लोन्ली-लोकली के सुझाव के साथ जाऊंगा। – InBetween
@InBetween: क्षमा करें, जब मैं बेहतर कहता हूं तो मुझे पठनीयता के लिए और अधिक मतलब था। लेकिन Lonli-lokli पद, जहां मैं अंत में यह एक SQL क्वेरी के रूप में चलाने की है, वांछित और पहले सभी परिणाम – musefan
भीतरी मिलती है के लिए एक आदर्श आवेदन है, जो अशक्त संदर्भ के साथ सभी तत्वों eleminate होगा की तरह लगता है वापस नहीं उल्लेख करने के लिए मेरी टिप्पणी को ध्यान में रखकर । सभी तालिकाओं में शामिल हों और परिणाम कंपनी के नाम से फ़िल्टर करें। (लेकिन यह और अधिक पठनीय नहीं होगा) – Stephan