web-dev-qa-db-fra.com

Convertir DataRowCollection en IEnumerable <T>

Je voudrais faire quelque chose comme ceci dans .NET 3.5. Quel est le moyen le plus rapide? 

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

En supposant que vous utilisiez .NET 4.0, qui introduit la 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;

Le type de table lui-même implémente IEnumerable<T> where T : DataRow.

Autrement:

IEnumerable<DataRow> collection = myTypedTable.Cast<DataRow>();
59
Dan Tao

Vous pouvez appeler OfType<DataRow>() sur la DataRowCollection

77
wsanville

Une solution simple consiste à utiliser la méthode "Select ()" d'un objet System.Data.DataTable, qui produit "DataRow []". A partir de cela, vous pouvez traiter comme un IEnumberable en utilisant Linq comme ci-dessous:

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

Fournir une liste utile d'objets pour chaque ligne.

2
Michael Erickson

Si vous incluez System.Data.DataSetExtensions.dll dans votre projet, une méthode d'extension intégrée ajoute une méthode AsEnumerable().

IEnumerable<DataRow> collection = TypedDataSet.TypedTableBase<DataRow>.AsEnumerable();
0
Scott Chamberlain