将数据行数组转换为数据表的简单方法
我想将一个DataRow
数组转换成DataTable
…什么是最简单的方法来做到这一点?
为什么不迭代DataRow数组并添加(如果需要,使用DataRow.ImportRow来获取DataRow的副本),如下所示:
foreach (DataRow row in rowArray) { dataTable.ImportRow(row); }
确保你的dataTable和DataRow数组中的DataRows具有相同的模式。
对于.Net Framework 3.5+
DataTable dt = new DataTable(); DataRow[] dr = dt.Select("Your string"); DataTable dt1 = dr.CopyToDataTable();
但是,如果数组中没有行,则可能会导致错误,如源中不包含DataRows 。 因此,如果您决定使用此方法CopyToDataTable()
,则应该检查数组是否知道它是否具有数据行。
if (dr.Length > 0) DataTable dt1 = dr.CopyToDataTable();
在MSDN提供的参考: DataTableExtensions.CopyToDataTable方法(IEnumerable)
DataTable dt = new DataTable(); DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria"); dt.Rows.Add(dr);
另一种方法是使用DataView
// Create a DataTable DataTable table = new DataTable() ... // Filter and Sort expressions string expression = "[Birth Year] >= 1983"; string sortOrder = "[Birth Year] ASC"; // Create a DataView using the table as its source and the filter and sort expressions DataView dv = new DataView(table, expression, sortOrder, DataViewRowState.CurrentRows); // Convert the DataView to a DataTable DataTable new_table = dv.ToTable("NewTableName");
简单的方法是:
// dtData is DataTable that contain data DataTable dt = dtData.Select("Condition=1").CopyToDataTable(); // or existing typed DataTable dt dt.Merge(dtData.Select("Condition=1").CopyToDataTable());
DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>();
DataTable dt = new DataTable(); foreach (DataRow dr in drResults) { dt.ImportRow(dr); }
这是解决scheme。 它应该工作正常。
DataTable dt = new DataTable(); dt = dsData.Tables[0].Clone(); DataRows[] drResults = dsData.Tables[0].Select("ColName = 'criteria'); foreach(DataRow dr in drResults) { object[] row = dr.ItemArray; dt.Rows.Add(row); }
任何人都需要它在VB.NET中:
Dim dataRow as DataRow Dim yourNewDataTable as new datatable For Each dataRow In yourArray yourNewDataTable.ImportRow(dataRow) Next
.Net 3.5+添加了DataTableExtensions,使用DataTableExtensions.CopyToDataTable方法
对于datarow数组只需使用.CopyToDataTable(),它将返回数据表。
对于单个数据行使用
new DataRow[] { myDataRow }.CopyToDataTable()
你可以像这样使用System.Linq:
if (dataRows != null && dataRows.Length > 0) { dataTable = dataRows.AsEnumerable().CopyToDataTable(); }