将DataRowCollection转换为DataRow

将DataRowCollection实例转换为DataRow []的最佳方式是什么?

DataRow[] rows = dt.Select(); 

假设你仍然可以访问数据表。

为了完整起见,这是另一种方式(与Linq),它保留行sorting

 DataRow[] rows = dt.Rows.Cast<DataRow>().ToArray() 

这是显而易见的,但是:

DataRowCollection.CopyTo(DataRow[] array, Int32 offset)

看来不pipe怎样,你将不得不迭代集合(CopyTo迭代内部DataRowTree元素)。

我想你可以使用reflection来访问非公有树,但花费很大。

如果您不能访问包含表格,则可以使用扩展方法:

 public static class DataRowCollectionExtensions { public static IEnumerable<DataRow> AsEnumerable(this DataRowCollection source) { return source.Cast<DataRow>(); } } 

之后:

 DataRow[] dataRows = dataRowCollection.AsEnumerable().ToArray(); 

但是,如果您有权访问包含表,最好使用DataTableAsEnumerable扩展方法( Description , Source )访问行:

 DataRow[] dataRows = dataTable.AsEnumerable().ToArray(); 

无论哪种方式,你可以使用DataTableSelect方法与几个重载( 描述 , 来源 ):

 DataRow[] dataRows = dataTable.Select();