2009-08-11 1 views
0

두 테이블 사이에 조인을 만들고 그 결과에 두 개의 테이블 열이 모두 포함됩니다. 특정 열 이름을 지정하지 않고이 작업을 수행하려면 두 개의 테이블을 포함하는 열 수를 알 수 없으며 이름을 알 수 없으므로 모두 선택하십시오.linq to 데이터 집합이있는 두 테이블 사이에 조인

2 개의 테이블 사이에 조인을 만들고 그 중 결과가 두 테이블 열을 모두 포함하게됩니다.

어떻게하면됩니까? 결과 유형은 무엇이되어야합니까?

내가 시도 :

var res = from t1 in ds1.Tables["Table1"].AsEnumerable() 
      join 
      t2 in ds1.Tables["Table2"].AsEnumerable() 
      on t1.Field<string>("TrID") equals t2.Field<string>("TrID") 
       select new { t1, t2 }; 

하지만 난 내가, 내가 DataTable에 데이터 집합으로 변환하거나있는 gridview에 제시 할 수 아무것도 할 수없는 결과로 이상한 유형을 얻을.

표 TRID SP Asaf1 Asaf2 F1 K2 :

예를 들어, 열 [TRID] [SP], [SP2] specificly없이 이러한 세 개의 열 익명의 유형을 생성하여 테이블을 얻을 Asaf1 D2 H1 F1

표 2
TRID SP2 Asaf1 Dor2 Asaf1 U1 R1 W1 I1 Y3

답변

0

마술처럼 두 테이블을 병합 할 방법이 없습니다. 새 DataTable을 원할 경우 적절한 열이있는 새 열을 만들고 이에 따라 행을 추가해야합니다. 또는 실제로 익명 형식을 컨트롤에 바인딩 할 수 있지만 현재 익명 형식 인 DataRow 속성에는 바인딩 할 수 없습니다. 대신, 당신은 당신이 원하는 필드를 추출해야합니다

var res = from t1 in ds1.Tables["Table1"].AsEnumerable() 
      let id = t1.Field<string>("TrID") 
      join t2 in ds1.Tables["Table2"].AsEnumerable() 
      on id equals t2.Field<string>("TrID") 
       select new { 
        TrID = id, 
        SP = t1.Field<string>("SP"), 
        SP2 = t2.Field<string>("SP2") 
       }; 

그런 다음 당신이 TrID, SPSP2에 데이터 소스와 결합 등의 res을 설정할 수 있습니다.