2011-03-14 9 views
6

का उपयोग कर आईडी के रूप में आईडी की सूची कैसे प्राप्त करूं, मेरे पास मेरे कोड में एक डेटाटेबल है, पीडीटी कहें। मैं बस सभी table["id"] चुनना चाहता हूं और फिर एक पूर्णांक सरणी में पॉप्युलेट करना चाहता हूं।मैं LINQ

मैं foreach के साथ आगे बढ़ सकता हूं लेकिन मैं लैम्ब्डा अभिव्यक्ति सीखने की कोशिश कर रहा हूं। मैं यह नहीं समझ सकता कि इससे कैसे निपटें।

मैं

List<int> Ids = pdt.Select(row => row["Id"]; return Convert.ToInt32(r)); 

और

int[] Ids = pdt.Select(row => row["Id"]); 

की कोशिश की है लेकिन कुछ भी काम करने के लिए लगता है। मुझे पूरा यकीन है कि यह एक बुनियादी सवाल है, कृपया नौसिखिया की मदद करें।

+0

Nowdays आप इसे 'वर आईडी की तरह कर सकते हैं = yourObject.Select (x => x.Id) .ToList();' –

उत्तर

21

आप एक सरणी चाहते हैं, आप ToArray() विस्तार विधि का उपयोग करने की आवश्यकता है ... लेकिन आप भी दृढ़ता से एक DataRow अनुक्रम के संदर्भ में लिखे गए डेटा तालिका बनाने के लिए DataTableExtensions.AsEnumerable() विस्तार विधि का उपयोग करना चाहते हैं:

int[] ids = pdt.AsEnumerable() 
       .Select(r => (int) r["Id"]) 
       .ToArray(); 

संपादित करें: जैसा कि abatishchev के जवाब में बताया गया है, स्पष्ट कलाकारों के लिए एक विकल्प यहाँ (DataRowExtenions में) Field<T> विस्तार विधि का उपयोग करने होगा:

int[] ids = pdt.AsEnumerable() 
       .Select(r => r.Field<int>("Id")) 
       .ToArray(); 
+0

excellenté, ग्रेसियस। – iamserious

2

उपयोग प्रकार सुरक्षित कॉल:

r.Field<string>("Id") 
+1

मुझे नहीं लगता कि यह इसका एक डुप्लिकेट है। वह एक स्ट्रिंग सरणी को परिवर्तित कर रहा था ... यह प्रत्येक पंक्ति में 'आईडी' फ़ील्ड को डेटाटेबल में परिवर्तित कर रहा है। विशेष रूप से, मुझे विश्वास नहीं है कि आपका कोड काम करेगा, बशर्ते कि हम इनपुट के बारे में जानते हैं, 'pdt' चर - 'r' केवल लैम्ब्डा अभिव्यक्ति पैरामीटर के रूप में पेश किया गया है। –

+1

यदि आप पहले ही डुप्लिकेट के रूप में बंद करने के लिए मतदान कर चुके हैं तो एक उत्तर क्यों जोड़ें? – ChrisF

+0

@ जोन: आप सही हैं। 'AsNumerable()' + 'चुनें()' ओपी को – abatishchev