将特定列从一个DataTable复制到另一个DataTable

在DataTable中读取一些数据(来自excel文件),现在我想过滤它并仅将特定列复制到另一个列!

dataTable格式:

some data ColA|ColB|ColC xxxx|xxxx|xxxx some data 

some data表示与ColA-ColC无关的其他表数据

如何将带有xxxx的ColA-ColC复制到新的DataTable?

谢谢

复制整个表并删除不需要的列。

 DataTable copyDataTable; copyDataTable = table.Copy(); copyDataTable.Columns.Remove("ColB"); 

要么

 int columnIndex = 1;//this will remove the second column DataTable copyDataTable; copyDataTable = table.Copy(); copyDataTable.Columns.RemoveAt(columnIndex); 

您可以使用DataView.ToTable()来完成它:

 System.Data.DataView view = new System.Data.DataView(yourOriginalTable); System.Data.DataTable selected = view.ToTable("Selected", false, "col1", "col2", "col6", "col7", "col3"); 

请检查一下

  foreach (DataRow dr in dataTable1.Rows) { if (/* some condition */) dataTable2.Rows.Add(dr.ItemArray); } 

上面的示例假定两个表具有相同的数量,类型和列顺序。

这是实际的链接

仅使用兴趣列定义您的副本DataTable。 您可以循环使用源行的列,并使用以下示例代码将值设置为目标行:

 public void IntegrateRow(DataRow p_RowCible, DataRow p_RowSource) { try { foreach (DataColumn v_Column in p_RowCible.Table.Columns) { string ColumnName = v_Column.ColumnName; if (p_RowSource.Table.Columns.Contains(ColumnName)) { p_RowCible[ColumnName] = p_RowSource[ColumnName]; } } } catch (Exception e) { ... 

此方法接收数据表(TextFileTable)作为参数,并继续将TextFileTable的选定内容复制到tblFormat表中。在add row语句中,列数必须与目标ted表中的列数相匹配,即使两个表可以有不同的大小。

 public DataTable CopyTable (DataTable TextFileTable) { DataTable tblFormat = new DataTable(); tblFormat.Columns.Add("ColumnA"); tblFormat.Columns.Add("ColumnB"); tblFormat.Columns.Add("ColumnC"); tblFormat.Columns.Add("ColumnD"); tblFormat.Columns.Add("ColumnE"); for (int i = 0; i < TextFileTable.Rows.Count; i++) { tblFormat.Rows.Add(new string[] { TextFileTable.Rows[i][0].ToString(), TextFileTable.Rows[i][1].ToString(), TextFileTable.Rows[i][2].ToString(), TextFileTable.Rows[i][8].ToString(), TextFileTable.Rows[i][9].ToString() }); } return tblFormat; } 

它可以使用LINQ实现

假设我们有两个DataTable 。 1. dtSource和2. dtDestination

如果dtDestination没有行,则使用下面的代码生成空行。

 dtSource.AsEnumerable().All(row => { dtDestination.Rows.Add(); return true; }); 

下面的代码将特定的DataColumn数据复制到另一个DataTable DataColumn 。 假设两个表具有相同的行数。

 int rowIdx = 0; dtDestination.AsEnumerable().All(row => { row["colName"] = dtSource.Rows[rowIdx++]["colName"]; return true; });