[C# 문법] 서로 다른 2개의 DataTable Merge(병합) 하여 단일 행으로 만드는 방법

안녕하세요.

 

오늘은 C# 문법에서 서로 다른 2개의 DataTable을 병합하여 단일 행으로 만드는 방법에 대해서 알려 드리려고 합니다.

 

프로젝트를 하던 중, 해당 기능을 사용해야 하는 경우가 생겨서 구글링 하던 중 StackOverFlow에 찾은 메서드를 바탕으로 글을 작성하는 점, 즉 제가 구현한 게아니라 구현된 메서드를 이용해서 포스팅 하는 점 참고해 주시면 좋겠습니다!

 

https://stackoverflow.com/questions/47290013/join-two-datatables-different-columnname-into-one-datatable

 

여기서 발췌하여 테스트 하였습니다.

 

그럼 예제 코드를 작성해서 정말로 2개의 DataTableMerge가 되어 단일 행으로 되는지 보겠습니다.

 

예제 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Data;
using System.Linq;
 
namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            //첫 번째 DataTable
            DataTable dt1 = new DataTable();
 
            dt1.Columns.Add("이름"typeof(string));
            dt1.Columns.Add("나이"typeof(int));
 
            dt1.Rows.Add("범범조조"29);
            dt1.Rows.Add("아이유"30);
 
            //두 번째 DataTable
            DataTable dt2 = new DataTable();
 
            dt2.Columns.Add("성적"typeof(string));
 
            dt2.Rows.Add("A");
            dt2.Rows.Add("B+");
 
            //합치기
            DataTable mergeTable = new DataTable();
            mergeTable = MergeTablesByIndex(dt1, dt2);
 
        }
 
        public static DataTable MergeTablesByIndex(DataTable dt1, DataTable dt2)
        {
            if (dt1 == null || dt2 == null
                throw new ArgumentNullException("t1 or t2""Both tables must not be null");
 
            DataTable dt3 = dt1.Clone();  // first add columns from table1
            foreach (DataColumn col in dt2.Columns)
            {
                string newColumnName = col.ColumnName;
                int colNum = 1;
                while (dt3.Columns.Contains(newColumnName))
                {
                    newColumnName = $"{col.ColumnName}_{++colNum}";
                }
                dt3.Columns.Add(newColumnName, col.DataType);
            }
            var mergedRows = dt1.AsEnumerable().Zip(dt2.AsEnumerable(),
                (r1, r2) => r1.ItemArray.Concat(r2.ItemArray).ToArray());
            foreach (object[] rowFields in mergedRows)
                dt3.Rows.Add(rowFields);
 
            return dt3;
        }
    }
}
 
cs

 

실행 결과

 

위와 같이 dt1, dt2 과 병합이 되어 서로 같은 라인의 Row가 병합이 되어 표시되는 것을 확인하실 수 있습니다.

 

감사합니다.^^

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY