2010-07-15 6 views
2

두 행의 DataTable DT1과 DT2가 있다고 가정 해 보겠습니다. COL1, Col2의, 및 열 3DataTable in C#

DT2 2 열 갖는다 :

DT1 3 열이 콜라 COLB한다.

Col1, Col2, Col3, ColA 및 ColB를 얻으려면이 두 DataTable을 수평으로 결합 할 수 있습니까?

+0

* join *이라고 말하면 무엇을 의미합니까? 하나 또는 두 개의 행이 필요하십니까? – Kobi

+0

나는 그것들을 한 줄에 넣고 싶다. – Rabin

답변

2

나는 당신이 다음을 수행 할 수 있습니다에 당신이 결합 할 수있는 새로운 열을 추가해야하고 두 번째 테이블 또는

DataTable dt1 = new DataTable(); 

    dt1.Columns.Add("col1", typeof(string)); 
    dt1.Columns.Add("col2", typeof(string)); 
    dt1.Columns.Add("col3", typeof(string)); 

    DataTable dt2 = new DataTable(); 

    dt2.Columns.Add("cola", typeof(string)); 
    dt2.Columns.Add("colb", typeof(string)); 

    object[] row = {'1', '2', '3'}; 
    dt1.Rows.Add(row); 

    object[] row1 = { 'a', 'b' }; 
    dt2.Rows.Add(row1); 

    // Create columns in dt1 
    dt1.Columns.Add("cola", typeof(string)); 
    dt1.Columns.Add("colb", typeof(string)); 

    // Copy data from dt2 
    dt1.Rows[0]["cola"] = dt2.Rows[0]["cola"]; 
    dt1.Rows[0]["colb"] = dt2.Rows[0]["colb"]; 
0

AFAIK 아니요, DataSetDataTable은 자동 조인을 지원하지 않습니다. 새 열을 테이블에 추가하고 다른 테이블에서 열 값을 복사하여 조인을 수동으로 수행해야합니다.

0

그래서 당신이 단순히 컬렉션을 원하는 기존 테이블 중 하나에 데이터를 복사 얇은 :

var results = from rs1 in table1.Rows.Cast<DataRow>() 
       join rs2 in table2.Rows.Cast<DataRow>() on rs1.Field<int>("col1") equals rs2.Field<int>("colA")       
       select new { col1 = rs1.Field<int>("col1"), col2 = rs1.Field<string>("col3"), col3 = rs1.Field<string>("col3"), colA = rs1.Field<int>("colA"), colB = rs1.Field<string>("colB") }; 

당신은 얻을 것 DataTable하지만 select 문에 정의 된 익명 형식 개체의 IEnumerable<T> 모음. Obvoiusly 나는 조인 기준과 열의 데이터 유형을 추측하여 실제 데이터에 대해 적절하게 지정해야합니다.

+0

좋은 답변이지만 질문에 설명 된 두 테이블에 공통 키가 없다고 생각합니다. 다른 말로하면, 그는 잠재적으로 다른 유형의 데이터를 견인하기를 요구하고 있다고 생각합니다. 따라서 table1의 Col1은 int 일 수 있지만 Table2의 ColA는'varchar '일 수 있습니다. –

+0

Jason이 맞습니다. 그들은 공통 키가 없으며 숫자의 무리를 가지고 있습니다. – Rabin

+0

여러 개의 from을 사용하고 where 절에 조건을 넣어 원하는 linq에 조인을 지정할 수 있습니다. 외래 키 유형 관계가있는 경우이 옵션은 가장 간단한 옵션입니다. 각 테이블의 행을 연관시키는 방법을 지정할 수 있다면 relevent join을 사용하여 내 대답을 업데이트 할 수 있습니다. –