将DataRowCollection实例转换为DataRow []的最佳表现方式是什么?
DataRow[] rows = dt.Select();
假设您仍然可以访问数据表.
为了完整起见,这是另一种方式(使用Linq),它保留了行排序:
DataRow[] rows = dt.Rows.Cast().ToArray()
这有点显而易见,但是:
DataRowCollection.CopyTo(DataRow[] array, Int32 offset)
?
似乎无论如何,你将不得不迭代集合(CopyTo迭代内部DataRowTree元素).
我想你可以使用反射访问非公共树,但成本很高.
如果您无权访问包含表,则可以使用扩展方法:
public static class DataRowCollectionExtensions { public static IEnumerableAsEnumerable(this DataRowCollection source) { return source.Cast (); } }
之后:
DataRow[] dataRows = dataRowCollection.AsEnumerable().ToArray();
但是,如果您有权访问包含表,则最好使用DataTable
的AsEnumerable
扩展方法(Description,Source)来访问行:
DataRow[] dataRows = dataTable.AsEnumerable().ToArray();
无论哪种方式,您都可以将DataTable
的Select
方法与多个重载一起使用(Description,Source):
DataRow[] dataRows = dataTable.Select();