将datarow数组转换为datatable的简单方法

时间:2010-01-23 07:40:42

标签: c# arrays datatable datarow

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

14 个答案:

答案 0 :(得分:177)

适用于.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 Method (IEnumerable)

答案 1 :(得分:83)

为什么不迭代你的DataRow数组并添加(如果需要,使用DataRow.ImportRow来获取DataRow的副本),例如:

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

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

答案 2 :(得分:10)

DataTable dt = new DataTable(); 

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

dt.Rows.Add(dr);

答案 3 :(得分:10)

另一种方法是使用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");

答案 4 :(得分:7)

简单方法是:

// 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());

答案 5 :(得分:4)

DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{ 
    dt.ImportRow(dr);
}   

答案 6 :(得分:3)

DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>();

答案 7 :(得分:3)

DataTable Assetdaterow =
    (
        from s in dtResourceTable.AsEnumerable()
        where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
        select s
    ).CopyToDataTable();

答案 8 :(得分: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);
} 

答案 9 :(得分:1)

任何人都需要在VB.NET中使用它:

Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
     yourNewDataTable.ImportRow(dataRow)
Next

答案 10 :(得分:1)

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

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

对于单个数据流使用

new DataRow[] { myDataRow }.CopyToDataTable()

答案 11 :(得分:1)

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

DataTable dataTable =dtExisting.Clone();
foreach (DataRow row in rowArray) {
   dataTable.ImportRow(row);
}

答案 12 :(得分:0)

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

if (dataRows != null && dataRows.Length > 0)
{
   dataTable = dataRows.AsEnumerable().CopyToDataTable();
}

答案 13 :(得分: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);
}