2014-09-09 10 views
5

मैं How to: Combin Data with Linq by using joins में उदाहरणों का उल्लेख करता हूं। हमारे पास दो सूचियां हैं जिनमें पहले व्यक्ति वस्तुएं हैं (प्रथम- और अंतिम नाम)। दूसरी सूची में पालतू वस्तुओं (नाम) हैं जो एक व्यक्ति वस्तु (पालतू मालिक) रखती हैं। एक व्यक्ति के पास = = 0 पालतू जानवर हो सकते हैं।क्या लिंकक अनावश्यकता पैदा करता है?

क्या अब happend मैं प्रदर्शन समूह

में शामिल होने
Dim result1 = From pers in people 
      Group Join pet in pets 
      on pers Equals pet.Owner 
      Into PetList = Group 

LINQPad मुझे परिणाम से पता चलता है:

LinqPad Output

यह Linq तरह अतिरिक्तताओं का एक बहुत का निर्माण मेरे लिए लग रहा है (मैं लेकिन यहां गलत हो सकता है!)। पहला परिणाम ऑब्जेक्ट व्यक्ति को तीन बार ऑब्जेक्ट रखेगा। लिंकक नोबी के रूप में मेरे लिए यहां दो प्रश्न उठते हैं (लेकिन शायद मैं आउटपुट को सही तरीके से नहीं पढ़ता):

  1. क्या व्यक्ति ऑब्जेक्ट संदर्भ हैं? दुर्भाग्य से मुझे इसके बारे में कुछ भी नहीं मिला।
  2. उदाहरण क्वेरी ऊपर उल्लेख के बाद
Select pers.FirstName , pers.LastName, 
PetName = If(pet is Nothing, String.Empty, pet.Name) 

के साथ जारी है हम PetList में व्यक्ति वस्तु के बारे में सभी जानकारी है, तो क्यों न सिर्फ इस वस्तु क्वेरी? मेरी राय में हमें अब पर्स ऑब्जेक्ट की आवश्यकता नहीं है।

+0

मुझे लगता है कि यहां प्रमुख तथ्य हैं linq स्थगित निष्पादन का उपयोग करता है और इसे एक प्रारूप में संकलित किया जाना चाहिए जिसका अर्थ है कि इन अनावश्यकताएं (जितनी संभव हो सके) – Sayse

उत्तर

4

हां, उन व्यक्ति वस्तुओं के संदर्भ हैं। LINQ व्यक्ति वस्तुओं को क्लोन नहीं कर रहा है।

उस आउटपुट का कारण यह है कि LINQPad आपको यह दिखाने की कोशिश कर रहा है कि वह व्यक्ति कौन है। अपनी संपत्तियों और क्षेत्रों की सैर को दोहराने के बिना, यह बताने में मुश्किल होगी कि वह किस व्यक्ति का जिक्र कर रहा था।

+0

आपके उत्तर के लिए धन्यवाद! इसका मतलब है कि LINQPad कुंजी = व्यक्ति ऑब्जेक्ट दिखाता है लेकिन यह .NET में उत्पन्न Acutal ऑब्जेक्ट में नहीं है? मैंने अभी जांच की है, पेटलिस्ट में केवल एक पालतू और मालिक की संपत्ति है। मुझे इरादा मिल गया है, लेकिन यह अभी भी भ्रमित है। – ruedi

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