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

Dev*_*404 95 c# arrays datatable datarow

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

joe*_*joe 183

对于.Net Framework 3.5+

DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

但是如果数组中没有行,则可能导致错误,例如source不包含DataRows.因此,如果您决定使用此方法CopyToDataTable(),则应检查数组以确定它是否具有数据行.

if (dr.Length > 0)
    DataTable dt1 = dr.CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

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

  • 这应该被标记为正确的答案,因为`copyToDataTable()`方法创建所选行的列的完美副本,而`datatable.ImportRow(row)`方法不 (8认同)
  • 如果表中已有行,则此方法不好,因为这会替换已有的行.如果表空为开始就没关系. (5认同)
  • 只要.Net功能得到优化,我更喜欢这种方法.不要忘记在项目中添加对System.Data.DataSetExtensions的引用,这样你就不会沮丧地问自己为什么缺少这种方法(比如我) (5认同)

Jay*_*ggs 88

为什么不通过你的DataRow数组进行迭代,并添加(使用DataRow.ImportRow,如果必要的话,得到的DataRow的副本),是这样的:

foreach (DataRow row in rowArray) {
   dataTable.ImportRow(row);
}
Run Code Online (Sandbox Code Playgroud)

确保您的dataTable与DataRow阵列中的DataRows具有相同的架构.

  • 很好 !但我建议在foreach之前克隆DataTable.它复制DataTable的格式:newDataTable = oldDataTable.clone(); (4认同)
  • 提示:您的数据表必须具有创建的列,否则将无法正确填充。 (2认同)

Mit*_*eat 11

DataTable dt = new DataTable(); 

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

dt.Rows.Add(dr);
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试过了..错误发生在"输入数组长于此表中的列数"之类的内容中. (2认同)

ila*_*ans 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");
Run Code Online (Sandbox Code Playgroud)


Zol*_*ari 9

简单的方法是:

// 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());
Run Code Online (Sandbox Code Playgroud)


小智 5

DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>();
Run Code Online (Sandbox Code Playgroud)


小智 5

DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{ 
    dt.ImportRow(dr);
}   
Run Code Online (Sandbox Code Playgroud)


小智 5

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