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