2012-09-05 14 views
19

मैंने 2 टेबल में शामिल होने के लिए linq में शामिल होने का उपयोग किया है। शामिल होने और शामिल करने के बीच क्या अंतर है। जो मैं देखता हूं, वे दोनों एक ही व्यवहार करते हैं।LINQ शामिल बनाम शामिल हों। क्या वे बराबर हैं?

Include vs. Join 

उत्तर

23

मूल वस्तु संरचनाओं और ग्राफ को बनाए रखने का इरादा है। ऑब्जेक्ट ग्राफ़ के एक स्पष्ट प्रस्तुति को प्रोजेक्ट करने के लिए या ग्राफ से स्वाभाविक रूप से संबंधित नहीं होने वाले प्रकारों में शामिल होने के लिए एक जॉइन की आवश्यकता है (यानी शिपिंग सुविधा के शहर के साथ ग्राहक के शहर में शामिल हों)। db.Customers.Include("Orders") इस तरह एक वस्तु ग्राफ उत्पन्न करता है:

निम्नलिखित की तुलना करें,

Customer 
    Order 
    Order 
    Order 

इसके विपरीत आप के साथ भी ऐसा ही है, तो एक गुमनाम प्रकार में पेश में शामिल होने आप निम्नलिखित मिल सकता है एक:

from c in db.Customers 
join o in db.Orders on c.CustomerId equals o.CustomerId 
select new {c, o} 

// produces new Anonymous<Customer, Order> 

हालांकि दोनों डेटाबेस के लिए एक ही अनुरोध जारी कर सकते हैं, परिणामी प्रकार काफी अलग हो सकता है।

+1

लेकिन परिणाम भी वही है और यह है कि इसे शामिल करने के लिए सलाह दी जाती है। शामिल करें बनाम शामिल करें –

+1

नहीं, शामिल है SelectMany के माध्यम से एक अज्ञात प्रकार (TResult) उत्पन्न करता है। शामिल टीसीओएल के साथ टीएसओएस का उत्पादन आलसी लोड के बजाय बेसब्री से भरा हुआ है। –

9

एक अर्थ में, हाँ। शामिल होने के रूप में लागू किया गया है। शामिल लिंक की शून्यता के आधार पर यह एक आंतरिक या बाएं शामिल है।

तुम हमेशा एक इस तरह एक में शामिल होने का उपयोग कर, द्वारा अपने आप को शामिल का निर्माण कर सकते हैं:

db.Users.Select(u => new { u, u.City }) 

यह एक "शामिल हैं" है उपयोगकर्ता के शहर के लिए। यह स्वयं को एसक्यूएल में शामिल होने के रूप में प्रकट करता है।

+0

हाय क्या आप कृपया http://stackoverflow.com/q/18809817/859154 देख सकते हैं? यह आपके उत्तर में यहां कुछ ऐसा कहा गया है। –

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