Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert DataRowCollection to IEnumerable<T>

I would like to do something like this in .NET 3.5. What's the quickest way?

IEnumerable<DataRow> collection = 
    TypedDataSet.TypedTableBase<DataRow>.Rows as IEnumerable<DataRow>;
like image 283
Abdu Avatar asked Feb 11 '11 21:02

Abdu


4 Answers

You can call OfType<DataRow>() on the DataRowCollection.

like image 200
wsanville Avatar answered Nov 14 '22 16:11

wsanville


Assuming you're using .NET 4.0, which introduces covariance:

// 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;

The table type itself implements IEnumerable<T> where T : DataRow.

Otherwise:

IEnumerable<DataRow> collection = myTypedTable.Cast<DataRow>();
like image 41
Dan Tao Avatar answered Nov 14 '22 15:11

Dan Tao


A simple direct solution is to use the method "Select()" of a System.Data.DataTable object, which produces DataRow[]. From this you can treat as an IEnumerable<DataRow> using Linq like below:

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

Providing a useful list of objects for each row.

like image 5
Michael Erickson Avatar answered Nov 14 '22 17:11

Michael Erickson


There is a built in extension method if you include System.Data.DataSetExtensions.dll in to your project that adds a AsEnumerable() method.

IEnumerable<DataRow> collection = TypedDataSet.TypedTableBase<DataRow>.AsEnumerable();
like image 1
Scott Chamberlain Avatar answered Nov 14 '22 17:11

Scott Chamberlain