将DataRowCollection转换为IEnumerable <T>

我想在.NET 3.5中做这样的事情。 什么是最快的方法?

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

假设你正在使用.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; 

表types本身实现IEnumerable<T> where T : DataRow

除此以外:

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

你可以在DataRowCollection上调用OfType<DataRow>()

一个简单的直接解决scheme是使用产生“DataRow []”的System.Data.DataTable对象的方法“Select()”。 从这里你可以把IEnumberable看作使用Linq,如下所示:

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

为每一行提供一个有用的对象列表。

如果将System.Data.DataSetExtensions.dll添加到添加AsEnumerable()方法的项目中,则会有内置的扩展方法。

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