2009-09-18 14 views
6

मैंने पहले ही एसओ के माध्यम से खोज की है और इसके लिए एक व्यावहारिक समाधान नहीं कर सका। मैं सिर्फ यह समझने की कोशिश कर रहा हूं कि लिंक से इकाइयों में एकाधिक आंतरिक जुड़ने के लिए वाक्यविन्यास क्या है। धन्यवादआप लिंक से इकाइयों में एकाधिक आंतरिक जुड़ते हैं

उत्तर

9

जॉन का जवाब काम करेगा, लेकिन IMHO using join in LINQ to Entities is usually wrong, क्योंकि यह आपके मॉडल में कोड डुप्लिकेट करता है। मैं L2E में एक बहुत सरल तरीके से जॉन की क्वेरी पुनर्लेखन कर सकते हैं:

var query = from customer in db.Customers 
      from order in customer.Orders 
      from product in order.Products 
      from info in product.Info 
      select new 
      { 
       customer.Name, 
       info.BriefDescription 
      } 

टाइपिंग के बारे में 50% और डुप्लिकेट किए गए कोड का 0% है यही कारण है कि। ध्यान दें कि आपके रिश्तों को पहले से ही आपके डीबी में और आपके मॉडल में परिभाषित किया गया है। क्या आप वास्तव में लिखने वाली प्रत्येक क्वेरी में उन्हें फिर से डुप्लिकेट करना चाहते हैं, और जब आप अपने मॉडल को दोबारा बनाते हैं तो अपने प्रश्नों को तोड़ते हैं?

+1

वाह .. अच्छा बिंदु – user161433

+3

@ क्रैग - मेरी इच्छा है कि मैं समझ गया कि मैं कुछ घंटों पहले यहां क्या देख रहा था। जो मैंने याद किया वह "ग्राहक में ऑर्डर से था। ऑर्डर" - मैं "डीबी.ऑर्डर्स में ऑर्डर से" समकक्ष कर रहा था, जो कि बिल्कुल अलग है। हालांकि, इसके लिए धन्यवाद। – chris

+2

यह क्वेरी में क्रॉस जॉइन उत्पन्न करता है ... – dudeNumber4

7

ठीक है, मैं विशेष रूप से संस्थाओं को LINQ पता नहीं है, लेकिन सामान्य LINQ वाक्यविन्यास होगा:

var query = from customer in db.Customers 
      join order in db.Orders on customer.ID equals order.ID 
      join product in db.Products on order.ProductID equals product.ID 
      join info in db.Info on product.InfoID equals info.ID 
      select new { customer.Name, info.BriefDescription }; 

(अर्थात सिर्फ कई join खंड)।

अब मुझे संदेह है कि आपने पहले से ही कोशिश की है - यदि हां, तो क्या गलत हुआ?

+1

हालांकि यह वास्तव में काम करता है, मेरा मानना ​​है कि यह एल 2 ई के विशिष्ट मामले में शामिल होने के बजाय संबंधों का उपयोग करने के लिए बेहतर रूप है। –

+0

इस मामले के बारे में क्या होगा जब हम कुछ दी गई जानकारी-संस्थाओं से शुरू होते हैं ('डीबी.इन्फो में जानकारी से जहां जानकारी ... उत्पाद में शामिल हों ...'), स्पष्ट रूप से लिखित जॉइन उस मामले में अधिक कुशल नहीं होंगे ? या यह ईएफ में कोई फर्क नहीं पड़ता है और ग्राहकों से ग्राहक से आदेश में ग्राहक होगा। उत्पाद से ऑर्डर। उत्पाद में जानकारी से उत्पाद। जानकारी जहां जानकारी ... 'उतनी ही कुशल हो? – j00hi

+0

@ j00hi: आपको मूल रूप से उत्पन्न होने वाले एसक्यूएल को देखना होगा। –

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