将DataRowCollection转换为DataRow []

时间:2008-10-22 19:31:45

标签: c# performance datarow datarowcollection

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

4 个答案:

答案 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}}扩展方法(DescriptionSource)来访问行:

AsEnumerable

无论哪种方式,您都可以使用DataRow[] dataRows = dataTable.AsEnumerable().ToArray(); 的{​​{1}}方法进行多次重载(DescriptionSource):

DataTable