programing

데이터 테이블의 열만 다른 데이터 테이블로 복사하려면 어떻게 해야 합니까?

i4 2023. 6. 15. 21:35
반응형

데이터 테이블의 열만 다른 데이터 테이블로 복사하려면 어떻게 해야 합니까?

데이터 테이블의 열만 다른 데이터 테이블로 복사하려면 어떻게 해야 합니까?

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

원본 테이블의 구조만 복사하고 데이터는 복사하지 않습니다.

데이터가 없는 열 헤더가 있는 특정 데이터 테이블(dataTable1)의 구조를 다른 데이터 테이블(dataTable2)로 변경하려면 다음 코드를 따를 수 있습니다.

        DataTable dataTable2 = dataTable1.Clone();
        dataTable2.Clear();

이제 당신의 상태에 따라 데이터 표 2를 작성할 수 있습니다.:)

복사할 경우DataTable다른 사람에게DataTable다른Schema Structure그러면 다음을 수행할 수 있습니다.

  • 먼저 첫 번째 복제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()을 사용할 수 없습니다.

예:

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?
   }
}

스키마 테이블의 열을 템플릿으로 사용하여 기존 DataTable에 새 DataColumn을 생성하면 됩니다.

즉, ImportSchema의 코드는 다음과 같습니다.

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);
}

이는 완전히 새로운 DataTable을 만들기 위해 Clone()을 사용하지 않고 한 DataTable에서 다른 DataTable로 스키마/열을 복사하려는 상황의 한 예에 불과합니다.저는 다른 것들도 몇 번 만난 적이 있다고 확신합니다.

언급URL : https://stackoverflow.com/questions/2949858/how-to-copy-only-the-columns-in-a-datatable-to-another-datatable

반응형