将特定列从一个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; });