如何将DataTable中的列仅复制到另一个DataTable中?
DataTable.Clone()
方法可以实现此目的。
DataTable newTable = originalTable.Clone();
DataTable.Clone()
。 使用 Clone
函数仅复制架构。但是 DataTable.Copy()
复制结构和数据。DataTable dt = new DataTable();
dt.Columns.Add("Column Name");
dt.Rows.Add("Column Data");
DataTable dt1 = dt.Clone();
DataTable dt2 = dt.Copy();
dt1
只会有一个列,但是 dt2
将会有一个带有一行的列。
Datatable.Clone
对于大表格来说速度比较慢。我目前正在使用以下方法:
Dim target As DataTable =
New DataView(source, "1=2", Nothing, DataViewRowState.CurrentRows)
.ToTable()
DataTable dataTable2 = dataTable1.Clone();
dataTable2.Clear();
DataTable
复制到另一个不同的 Schema Structure
的 DataTable
中,则可以执行以下操作:
DataType
,以便只获取结构。DataTable
中。因此:
Dim dt1 As New DataTable
dt1 = dtExcelData.Clone()
dt1.Columns(17).DataType = System.Type.GetType("System.Decimal")
dt1.Columns(26).DataType = System.Type.GetType("System.Decimal")
dt1.Columns(30).DataType = System.Type.GetType("System.Decimal")
dt1.Columns(35).DataType = System.Type.GetType("System.Decimal")
dt1.Columns(38).DataType = System.Type.GetType("System.Decimal")
dt1 = dtprevious.Copy()
DataTable
,但结构经过修订。DataTable.Clone()
方法非常适用于创建全新的 DataTable,但有时您可能需要将一个 DataTable 的架构列添加到另一个已存在的 DataTable 中。
例如,如果您从 DataTable 派生了一个新的子类,并希望将架构信息导入其中,那么您不能使用 Clone() 方法。
E.g.:
public class CoolNewTable : DataTable {
public void FillFromReader(DbDataReader reader) {
// We want to get the schema information (i.e. columns) from the
// DbDataReader and
// import it into *this* DataTable, NOT a new one.
DataTable schema = reader.GetSchemaTable();
//GetSchemaTable() returns a DataTable with the columns we want.
ImportSchema(this, schema); // <--- how do we do this?
}
}
void ImportSchema(DataTable dest, DataTable source) {
foreach(var c in source.Columns)
dest.Columns.Add(c);
}
或者,如果你正在使用 Linq:
void ImportSchema(DataTable dest, DataTable source) {
var cols = source.Columns.Cast<DataColumn>().ToArray();
dest.Columns.AddRange(cols);
}