49

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

4

4 回答 4

103
DataRow[] rows = dt.Select();

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

于 2008-10-22T19:47:36.427 回答
17

为了完整起见,这是另一种方式(使用 Linq),它保留了行顺序

DataRow[] rows = dt.Rows.Cast<DataRow>().ToArray()
于 2012-04-23T14:25:22.490 回答
5

这很明显,但是:

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

似乎无论如何,您都必须迭代集合(CopyTo 迭代内部 DataRowTree 元素)。

我想您可以使用反射来访问非公共树,但成本很高。

于 2008-10-22T19:46:18.177 回答
5

如果您无权访问包含表,则可以使用扩展方法:

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

之后:

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

但是,如果您可以访问包含表,最好使用DataTableAsEnumerable扩展方法(DescriptionSource)访问行:

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

无论哪种方式,您都可以使用带有多个重载(DescriptionSourceDataTable )的 's方法:Select

DataRow[] dataRows = dataTable.Select();
于 2014-08-27T15:47:48.773 回答