104

我想将一个DataRow数组转换成DataTable......最简单的方法是什么?

4

14 回答 14

204

对于 .Net Framework 3.5+

DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();

但是如果数组中没有行,则会导致诸如The source contains no DataRows之类的错误。因此,如果您决定使用此方法CopyToDataTable(),您应该检查数组以了解它是否有数据行。

if (dr.Length > 0)
    DataTable dt1 = dr.CopyToDataTable();

MSDN 上提供的参考资料: DataTableExtensions.CopyToDataTable 方法 (IEnumerable)

于 2010-12-10T12:28:37.963 回答
97

为什么不遍历您的 DataRow 数组并添加(如有必要,使用 DataRow.ImportRow 来获取 DataRow 的副本),例如:

foreach (DataRow row in rowArray) {
   dataTable.ImportRow(row);
}

确保您的 dataTable 与 DataRow 数组中的 DataRows 具有相同的架构。

于 2010-01-23T08:40:59.480 回答
12
DataTable dt = new DataTable(); 

DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria");

dt.Rows.Add(dr);
于 2010-01-23T08:02:04.563 回答
11

另一种方法是使用 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");
于 2011-08-11T11:56:28.817 回答
10

简单的方法是:

// 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());
于 2014-05-20T08:23:11.583 回答
6
DataTable Assetdaterow =
    (
        from s in dtResourceTable.AsEnumerable()
        where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
        select s
    ).CopyToDataTable();
于 2018-09-27T11:31:58.603 回答
5
DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>();
于 2012-07-23T19:07:55.450 回答
5
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{ 
    dt.ImportRow(dr);
}   
于 2012-10-23T17:59:54.667 回答
4

.Net 3.5+ 添加 DataTableExtensions,使用 DataTableExtensions.CopyToDataTable 方法

对于数据行数组,只需使用 .CopyToDataTable() ,它将返回数据表。

对于单个数据行使用

new DataRow[] { myDataRow }.CopyToDataTable()
于 2016-08-23T16:16:06.837 回答
3

您可以像这样使用 System.Linq:

if (dataRows != null && dataRows.Length > 0)
{
   dataTable = dataRows.AsEnumerable().CopyToDataTable();
}
于 2017-03-27T17:07:39.237 回答
2

这是解决方案。它应该可以正常工作。

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);
} 
于 2011-06-29T06:21:39.790 回答
1

万一有人在 VB.NET 中需要它:

Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
     yourNewDataTable.ImportRow(dataRow)
Next
于 2014-10-03T14:51:59.897 回答
1

您需要先克隆数据表的结构,然后使用 for 循环导入行

DataTable dataTable =dtExisting.Clone();
foreach (DataRow row in rowArray) {
   dataTable.ImportRow(row);
}
于 2019-08-04T14:57:01.477 回答
0
DataTable dataTable = new DataTable();
dataTable = OldDataTable.Tables[0].Clone();
foreach(DataRow dr in RowData.Tables[0].Rows)
{
 DataRow AddNewRow = dataTable.AddNewRow();
 AddNewRow.ItemArray = dr.ItemArray;
 dataTable.Rows.Add(AddNewRow);
}
于 2018-02-15T09:28:38.167 回答