2011-10-01 8 views
5

मैं लिंकक के लिए पूरी तरह से नया हूं और सोच रहा हूं कि क्या आप निम्नलिखित लिंक के बीच अंतर को समझने में मेरी मदद कर सकते हैं? उदाहरण के लिए ...LINQ - अंतर चुनें (n => n.Name) और। चयन करें (n => new {n.Name});

//normal select 
var contacts = entity.Contacts.Select(n => n.FirstName); 

//select new 
var contacts2 = entity.Contacts.Select(n => new { n.FirstName }); 

//normal select output 
foreach (var c in contacts) 
    Response.Write(c + "<br/>"); 

//select new output 
foreach (var c in contacts2) 
    Response.Write(c.FirstName + "<br/>"); 

फर्क सिर्फ इतना मैं देख सकता हूँ कि सामान्य चयन में, firstname (स्ट्रिंग), संग्रह में संग्रहीत किया जाता है, जबकि चयन नई में, किसी संपर्क वस्तु collecton में संग्रहीत किया जाता है और इसके नाम से पहले नाम का उपयोग किया जा रहा है। इसके अलावा चुनिंदा नए कथन में केवल गुणों का चयन करता है।

मैंने देखा एक और अंतर यह है कि आप चुनिंदा नए में कई विशिष्ट गुणों को वापस कर सकते हैं।

आप किस परिदृश्य में एक दूसरे को चुनते हैं?

सहायता के लिए धन्यवाद।

+1

यहां एक परिदृश्य है: 'नया चुनें {n.FirstName, n.LastName} ' –

उत्तर

20

n => n.FirstName आप देता है एक string

n => new { n.FirstName } आप एक anonymous type देता है, एक string संपत्ति FirstName

सामान्य तौर पर, सिर्फ एक संपत्ति के साथ एक अनाम प्रकार कहा जाता है के साथ शायद आप के लिए क्या नहीं रहते हैं, इसलिए मैं पहले विकल्प के लिए जाना होगा।

6

रिचर्ड Ev के जवाब का समर्थन करने के लिए:

आप बेनामी प्रकार से परिचित नहीं हैं, तो ILDASM अप दरार और इसे करने के लिए एक इनपुट के रूप में अपने exe दे।

आप कुछ इस तरह मिल जाएगा:

enter image description here

बात आप < के साथ शुरू देखें कि> f_AnonymousType() एक ही है कि रिचर्ड Ev बारे में बात कर रहा है। new का आपका वाक्यविन्यास एक नई कक्षा में अनुवादित हुआ (नाम संकलक द्वारा तय किया गया था)। यही कारण है कि var कीवर्ड अनाम प्रकार के साथ काम करने में बहुत उपयोगी है।

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