2017-12-20 11 views
1

두 개의 DataTable이 있습니다. 첫 번째 테이블의 열은C#을 사용하여 Datatable의 특정 열을 한 번에 복사

ABCDE

두 번째 테이블의 열입니다

BCFDEG

나는 모든 열의 데이터를 복사 할 이름이 두 번째 테이블에있는 첫 번째 테이블에서.

내 표는 내가 (단지 니펫을) 내가 그런 일을하고있는 중이 야 열

으로는 열

foreach (string colname in sourceColumnNames) 
    { 
     if (!targetColumnNames.Contains(colname)) continue; 
     // There are other steps as well 
     tRow[colname] = sRow[colname]; 
    } 

를 지정하지 않으 상당히 큰 그러나 그것은 매우 최적이 아니다.

저는 ItemArray를 사용하여이를 수행하려고합니다. 따라서 전체 배열 (필요한 열만)을 한 번에 복사 할 수 있습니다. 제 생각은 소스 테이블과 목표 테이블 사이의 열 이름을 일치시키고 사전에 저장하고 해당 사전에서 항목 배열을 만드는 것입니다.

밖으로 당신이 모든 행에 대한 일반적인 열을 확인하는 귀하의 예를 바탕으로 각 열

+0

here 봐? 'dataSource'에 액세스 할 수 있으십니까? – zcui93

+0

두 번째 테이블이 필요합니까? 첫 번째 테이블을 복사하고 열의 이름을 바꾸고 삭제하는 방법은 무엇입니까? – Ctznkane525

+0

일부 계산이 소스 테이블에서 수행되고 결과가 목표 테이블에 저장됩니다. – Student

답변

0

를 통과하여 2 개 데이터 테이블 사이의 선택은 특정 열을 복사하는 다른 최적의 방법이있다. 이 열은 모든 행에서 동일하므로 한 번만 수행하면됩니다.

//Create a mapping 
List<Tuple<int, int>> columnMappings = new List<Tuple<int, int>>(); 
for (int dt1ColumnIndex = 0; dt1ColumnIndex < dt1.Columns.Count; dt1ColumnIndex++) 
{ 
    string columnName = dt1.Columns[dt1ColumnIndex].ColumnName; 
    if (dt2.Columns.Contains(columnName) == true) 
    { 
     int dt2ColumnIndex = dt2.Columns.IndexOf(columnName); 
     columnMappings.Add(new Tuple<int, int>(dt1ColumnIndex, dt2ColumnIndex)); 
    } 
} 

는 이제 새 행을 만드는 첫 번째 테이블의 모든 행을 반복 할 수 있습니다 :

첫 번째 단계는 표 2, 표 1의 열 매핑을 만드는 것입니다 : 여기를 해결하는 내 생각은 표 2로 :

//Add all rows from table 1 to table two based on the mapping 
foreach (DataRow dt1Row in dt1.Rows) 
{ 
    DataRow dt2Row = dt2.NewRow(); 
    foreach (Tuple<int, int> columnMapping in columnMappings) 
    { 
     dt2Row[columnMapping.Item2] = dt1Row[columnMapping.Item1]; 
    } 
    dt2.Rows.Add(dt2Row); 
} 
+0

내 방법이 개선되었습니다. 그러나 여전히 프로그램은 일치하는 각 열을 하나씩 복사합니다. 한 번에 ItemArray를 복사하는 방법이 있습니까? – Student

+0

'DataRow'는 관리 대상이므로 직접 복사하는 방법은 없다고 생각합니다. – Fruchtzwerg

1

DataTable.Load 방법을 사용할 수 있습니다. 원본 행을 대상 테이블에 복사하므로 열 매핑에 대해 걱정할 필요가 없습니다. 예는 어떻게해야 할 일 :

자세한 내용은
dataTable2.Load(dataTable1.CreateDataReader()); 

DataTable.Load 나는 질문은 왜 복사 할 것이라고 추측

+1

답변을 설명하고 관련 코드를 게시하는 것이 좋습니다. 그냥 링크를 게시하는 것이 좋습니다. –