将数据行数组转换为数据表的简单方法

我想将一个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(); } 
Interesting Posts