将DataRowCollection转换为IEnumerable <T>

Abd*_*bdu 61 .net c# linq ienumerable .net-3.5

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

IEnumerable<DataRow> collection = 
    TypedDataSet.TypedTableBase<DataRow>.Rows as IEnumerable<DataRow>;
Run Code Online (Sandbox Code Playgroud)

wsa*_*lle 84

你可以打电话OfType<DataRow>()DataRowCollection.

  • 这是最简单的解决方案 (7认同)
  • 这与在DataRowCollection上调用Cast <DataRow>()没有什么不同,DataRowCollection已经在接受的答案中.(除非我们分裂头发,我相信OfType会做一些Cast不会打扰的不必要的过滤) (2认同)

Dan*_*Tao 66

假设您使用的是引入协方差的.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;
Run Code Online (Sandbox Code Playgroud)

表类型本身实现IEnumerable<T> where T : DataRow.

除此以外:

IEnumerable<DataRow> collection = myTypedTable.Cast<DataRow>();
Run Code Online (Sandbox Code Playgroud)


Mic*_*son 5

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

List<MyItem> items = dtItems.Select().Select(row => new MyItem(row)).ToList();
Run Code Online (Sandbox Code Playgroud)

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