[C#] Datatable Merge 하기

C# 2023. 6. 29. 12:57
728x90

두개의 테이블을 옆으로 붙여 하나의 테이블로 반환하는 코드입니다.

public static DataTable MergeTables(this DataTable sourceDt, DataTable destDt)
{
    if (sourceDt == null || destDt == null)
    {
        throw new ArgumentNullException("sourceDt, destDt", "Both tables must not be null");
    }

    DataTable resultDt = sourceDt.Clone();

    foreach (DataColumn col in destDt.Columns)
    {
        string newColumnName = col.ColumnName;
        int colNum = 1;

        // 컬럼이 존재하는 경우 새로운 컬럼 생성
        while (resultDt.Columns.Contains(newColumnName))
        {
            newColumnName = $"{col.ColumnName}_{++colNum}";
        }

        resultDt.Columns.Add(newColumnName, col.DataType);
    }

    var mergedRows = sourceDt.AsEnumerable().Zip(destDt.AsEnumerable(), (r1, r2) => r1.ItemArray.Concat(r2.ItemArray).ToArray());

    foreach (object?[] rowFields in mergedRows)
    {
        resultDt.Rows.Add(rowFields);
    }

    return resultDt;
}

 

아래 두테이블을 합치면

A B C
1 2 3
4 5 6
C D
1
2
3

결과

A B C C1 D
1 2 3 1
4 5 6 2
      3

 

728x90
Posted by kjun.kr
,