2011-02-11 13 views
47

में कनवर्ट करें मैं .NET 3.5 में ऐसा कुछ करना चाहता हूं। सबसे तेज़ तरीका क्या है?DataRowCollection को IENumerable <T>

IEnumerable<DataRow> collection = 
    TypedDataSet.TypedTableBase<DataRow>.Rows as IEnumerable<DataRow>; 

उत्तर

50

आप .NET 4.0, जो सहप्रसरण का परिचय का उपयोग कर रहे मान लिया जाये:

// Presumably your table is of some type deriving from TypedTableBase<T>, 
// where T is an auto-generated type deriving from DataRow. 
IEnumerable<DataRow> collection = myTypedTable; 

table type itself औजार IEnumerable<T> where T : DataRow

अन्यथा:

IEnumerable<DataRow> collection = myTypedTable.Cast<DataRow>(); 
+0

यह और wsanville के उत्तर मेरे लिए प्रासंगिक थे। ऐसा होता है कि कास्ट अपवाद फेंकता है जब उसे कोई ऐसा आइटम मिलता है जिसे TResult में नहीं डाला जा सकता है। दूसरी तरफ, ऑफ टाइप केवल उन वस्तुओं को लौटाता है जो प्रकार ट्रेशल्ट हैं। Https://msdn.microsoft.com/en-us/library/bb360913(v=vs.110).aspx पर प्रलेखन देखें – Th3B0Y

66

आप DataRowCollection पर OfType<DataRow>() कॉल कर सकते हैं।

+4

यह सबसे आसान समाधान है –

+0

स्वीकार्य उत्तर होना चाहिए! –

+0

यह DataRowCollection पर कास्ट () को कॉल करने से वास्तव में अलग नहीं है, जो पहले से ही स्वीकृत उत्तर में है। (अगर हम बाल विभाजित कर रहे हैं, तो मुझे लगता है कि ऑफटाइप कुछ अनावश्यक फ़िल्टरिंग करता है जिसमें कास्ट परेशान नहीं होता है) –

2

एक सरल प्रत्यक्ष समाधान "() का चयन करें" एक System.Data.DataTable वस्तु है, जो "DataRow []" का उत्पादन करने की विधि का प्रयोग है। प्रत्येक पंक्ति के लिए वस्तुओं की एक उपयोगी सूची प्रदान

List<MyItem> items = dtItems.Select().Select(row => new MyItem(row)).ToList(); 

: इस से आप नीचे दिए गए की तरह Linq का उपयोग कर एक IEnumberable के रूप में इलाज कर सकते हैं।

0

यदि आप AsEnumerable() विधि जोड़ते हैं तो इसमें System.Data.DataSetExtensions.dll शामिल है, तो विस्तारित एक विस्तृत विधि है।

IEnumerable<DataRow> collection = TypedDataSet.TypedTableBase<DataRow>.AsEnumerable(); 
संबंधित मुद्दे