2010-03-31 19 views
5

foreach (वर व्यक्ति peopleList.Where में (व्यक्ति => person.FirstName == "मेसी")) { selectPeople.Add (व्यक्ति); }को सरल बनाने - मूल चयन

मैं सोच रहा हूं कि LINQ का उपयोग करके इसे सरल बनाने का कोई तरीका है या नहीं।

तरह के बजाय सभी लोगों को मैं LINQ उपयोग करने के लिए बस "मेसी" के साथ एक सूची को भरने के लिए कोशिश कर रहा था देखो ... कुछ की तरह कोशिश कर रहा था ...

var selectPeople = peopleList.Select(x=>x.FirstName=="Messi");

फिर

मैं बिना चेक के उस सूची में सभी को जोड़ सकता हूं। लेकिन यह योजना के रूप में काफी काम नहीं करता है।

शायद उस अभिव्यक्ति को सरल बनाने में कोई बात नहीं है। लेकिन सवाल यह है कि मैं अपने LINQ ज्ञान को मजबूत करने के लिए सार्थक लग रहा था।

+0

मैं अब मिल गया है 'वर selectPeople = peopleList.Where (व्यक्ति => person.Name ==" मेसी ") ToList() ; 'तो मुझे लगता है कि सवाल वास्तव में चयन और चयन का उपयोग करने के बारे में है – baron

+1

' SelectMany' का उपयोग तब किया जाता है जब प्रत्येक आइटम एकाधिक परिणाम लौटा सकता है और आप उन्हें एक परिणाम परिणाम में जोड़ना चाहते हैं। जैसे 'IENumerable allChildren = person.SelectMany (person => person.GetChildren()); 'आपको अपने उदाहरण के साथ इसकी आवश्यकता नहीं है। –

+1

इसके अलावा, जब आप क्वेरी अभिव्यक्ति के बजाय लैम्बडास के साथ विस्तार विधियों का उपयोग कर रहे हैं तो 'चयन' अक्सर अनावश्यक होता है। लेकिन अगर आप ऑब्जेक्ट को किसी अन्य चीज़ में प्रोजेक्ट करना चाहते हैं, तो 'चुनें' का उपयोग करें। उदाहरण के लिए, यदि आप केवल प्रथम नाम की सूची चाहते हैं, तो फर्स्टनाम "मेस्सी" के बराबर होता है, तो आप 'peopleList.Where (p => p.FirstName == "Messi") जैसे कुछ करेंगे। चुनें (p => p.LastName) ; ', जिसके परिणामस्वरूप 'IENumerable ' दिए गए मानदंडों से मेल खाने वाले सभी लोगों के अंतिम नामों का प्रतिनिधित्व करना चाहिए। –

उत्तर

5

आप करीब हैं। व्यावहारिक रूप से इसे जानने के बिना किया।

var selectPeople = peopleList.Where(x=>x.FirstName == "Messi"); 

कि एक IEnumerable<X> पैदा करेगा, जहां X जो कुछ भी प्रकार peopleList में कर रही है।

क्वेरी अभिव्यक्ति वाक्य रचना

var selectPeople = from person in peopleList 
        where person.FirstName == "Messi" 
        select person; 

होगा और ठोस सूची प्रारूप में इसे पाने के लिए, मेरा मानना ​​है कि आप भी पहले से ही .ToList() विस्तार की खोज की है।

1

लोग सूची किस प्रकार है? मेरा मानना ​​है कि LINQ के काम के लिए यह एक प्रकार का IENumerable होना चाहिए।

var selectPeople = peopleList.AsEnumerable().Select(x=>x.FirstName=="Messi"); 

चूंकि यह सूची और अपने चयन पर कील पर एक List<X> प्रकार कॉल AsEnumerable() है और यह काम करना चाहिए।

+0

यह 'सूची ' – baron

+0

उपर्युक्त रेखा का प्रयास करें और देखें कि क्या यह काम करता है, हम यहां अनन्य के रूप में कास्टिंग कर रहे हैं .... – Gabe

+1

' AsEnumerable() 'अनावश्यक है। इसके अलावा 'सिलेक्ट' के परिणामस्वरूप 'आईनेमरेबल ' 'IENumerable ' –

1
var selectPeople = new List<Person>(peopleList.Where(x=>x.FirstName=="Messi")); 

या यदि आप पहले से ही एक सूची है:।

selectPeople.AddRange(peopleList.Where(x=>x.FirstName=="Messi")); 
संबंधित मुद्दे