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