2012-04-25 4 views
0

에 추가하면 데이터 집합 Ds1과 데이터 집합 Ds2가 생성되고 DS1에는 Product_ID, 제품 정보가 포함되며 ds2에는 Product_ID, product_type이 포함됩니다.One DataSet의 열을 다른

일치하는 product_id에 대해 ds2에서 ds1까지 Product_tye 열을 추가하고 싶습니다.

주 : Product_id는 ds 1에서 기본 키가 아니며, 결과 세트에는 동일한 product_id를 가진 많은 제품이 있습니다. ds 2에서 product_id는 고유합니다. 또한 이러한 데이터 형식은 서로 다른 서버의 서로 다른 두 데이터베이스에서 가져온 것으로 서로 다른 자격 증명이 있으므로 SQL 결합을 사용할 수 없습니다.

나는 이것을 달성하기 위해 linq를 사용하려고했지만, 원하는 결과물을 얻지 못했다. 뭔가를 얻고 있다면 나를 바로 잡아라.

DataTable dt1 = new DataTable(); 
DataTable dt2 = new DataTable(); 
//After both the datatble has values, using linq to add datatble columsn, 

DataTable result = (from t1 in dt1.AsEnumerable() 
          join t2 in dt2.AsEnumerable() on t1.Field<string>("productID") equals t2.Field<string>("productID") 
          select t1).CopyToDataTable(); 
+0

내가이 뜻을 dount이 경우 INT와 string을 교체해야한다고 생각 간단 해. table1에 새 열을 만든 다음 두 테이블의 행을 반복하고 id를 확인하고 product id를 기반으로 table1의 정확한 행에 prodict_type을 추가해야합니다. –

답변

0

선택 테이블

DataTable result = (from t1 in dt1.AsEnumerable() 
         join t2 in dt2.AsEnumerable() on t1.Field<string>("productID") 
            equals t2.Field<string>("productID") 
         select new {t1,t2} 
        ).CopyToDataTable(); 

또는 선택 모두 선택한 열

DataTable result = (from t1 in dt1.AsEnumerable() 
         join t2 in dt2.AsEnumerable() on t1.Field<string>("productID") 
             equals t2.Field<string>("productID") 
         select new { 
         productId = t1.productID, 
         col2 = t1.col2,..., 
         productType = t2.pruductType 
        ).CopyToDataTable(); 

참고 : 나는 제품 ID 유형이 int 유형이 너무

+0

두 번째 쿼리 : 선택한 열 목록 뒤에 중괄호를 닫아야합니다. '새 선택 {....}' – Kaf

0
난 그냥 당신에게 간단한 예를 들어, 당신이해야 할 것은 자신과, 내 코드에서 열 이름을 변경하는 것입니다 만든

:

 DataTable table1 = new DataTable(); 
     DataTable table2 = new DataTable(); 
     table1.Columns.Add("id", typeof(int)); 
     table1.Columns.Add("name", typeof(string)); 
     table2.Columns.Add("id", typeof(int)); 
     table2.Columns.Add("age", typeof(int)); 

     table1.Rows.Add(1, "mitja"); 
     table1.Rows.Add(2, "sandra"); 
     table1.Rows.Add(3, "nataška"); 

     table2.Rows.Add(1, 31); 
     table2.Rows.Add(3, 24); 
     table2.Rows.Add(4, 46); 

     DataTable targetTable = table1.Clone(); 
     //create new column 
     targetTable.Columns.Add("age"); 

     var results = from t1 in table1.AsEnumerable() 
         join t2 in table2.AsEnumerable() on t1.Field<int>("id") equals t2.Field<int>("id") 
         select new 
         { 
          ID = (int)t1["id"], 
          NAME = (string)t1["name"], 
          AGE = (int)t2["age"] 
         }; 

     foreach (var item in results) 
      targetTable.Rows.Add(item.ID, item.NAME, item.AGE); 

변수의 유형을 정의에주의하십시오 (INT , 문자열, ...) 어떤 경우에! 도움이 되길 바랍니다.

+0

고마워 .. 많이 일했다 – Softwaresucks

관련 문제