将 DataRowCollection 实例转换为 DataRow[] 的最佳执行方式是什么?
Jeff
问问题
47632 次
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();
但是,如果您可以访问包含表,最好使用DataTable
的AsEnumerable
扩展方法(Description,Source)访问行:
DataRow[] dataRows = dataTable.AsEnumerable().ToArray();
无论哪种方式,您都可以使用带有多个重载(Description,SourceDataTable
)的 's方法:Select
DataRow[] dataRows = dataTable.Select();
于 2014-08-27T15:47:48.773 回答