2011-02-22 3 views
2

(SQLS DB 안에) 관계가있는 두 개의 Datatables (dtStock 및 dtSpec, dtSpec.ItemTypeID = dtStock.ID)를 가지고 있습니다. DB에서 별도로 (SqlClient를 사용하여) 이들을 끌어 와서 CommandBuilders로 업데이트 할 수 있습니다.C#/LINQ (?) - 두 개의 DataTable 조인 (SQL없이!)

단일 Datatable (dtJob)을보고 싶은 컨트롤이 있습니다.

컨트롤을 사용하여 dtJob을 업데이트 할 때 dtSpec과 dtStock도 업데이트되도록 그들을 어떻게 가입시킬 수 있습니까? 나는 이것이 LINQ를 포함 할 것이라고 추측하고있다. ...

이것은 아주 간단해야 할 것처럼 들리지만, 내가 찾은 예제 중 대부분은 데이터를 참조하기보다는 새로운 테이블에 복사하는 것처럼 보인다. 원본 데이터 또는 많은 코드가 필요합니다 (예 : 조인을 처리하기 위해 CopyToDataTable 메서드 다시 작성). 어쩌면 내 Google-fu는 쓰레기 일뿐입니다. dtJobDataTable의 스키마 당신이 두 개의 다른 테이블에 dtJob에서 변경 사항을 전파하기 위해 DataTable.Merge 방법을보고 할 수있는 dtStockdtSpec 스키마의 합이라고 가정 사전

답변

0

더 많은 양의 코드가 필요함) - 어떤 생각을 한 후에 두 개의 Datatables 어쨌든 내가하고 싶었던 것이 아니라, 다소 복잡한 것이 었습니다. 그래도 도움을 주셔서 감사합니다.

1

에서

감사합니다. 이 샘플에서 내가 메서드 호출을 더 쉽게 읽을 수 있도록하기 위해, C#을 4.0에서만 사용할 수 있습니다 named arguments을 사용했다고

dtStock.Merge(dtJob, preserveChanges: false, MissingSchemaAction.Ignore); 
dtSpec.Merge(dtJob, preserveChanges: false, MissingSchemaAction.Ignore); 

참고 :

다음은 예입니다.

var firstTable = new DataTable(); 
firstTable.Columns.Add(new DataColumn("FirstTableId", typeof(int))); 
firstTable.Columns.Add(new DataColumn("FirstTableName", typeof(string))); 
firstTable.Columns.Add(new DataColumn("SecondTableId", typeof(int))); 

var secondTable = new DataTable(); 
secondTable.Columns.Add(new DataColumn("SecondTableId", typeof(int))); 
secondTable.Columns.Add(new DataColumn("SecondTableName", typeof(string))); 

var joinedTable = new DataTable(); 
joinedTable.Columns.Add(new DataColumn("FirstTableId", typeof(int))); 
joinedTable.Columns.Add(new DataColumn("FirstTableName", typeof(string))); 
joinedTable.Columns.Add(new DataColumn("SecondTableId", typeof(int))); 
joinedTable.Columns.Add(new DataColumn("SecondTableName", typeof(string))); 

joinedTable.Rows.Add(1, "FirstTableRow1", 1, "SecondTableRow1"); 
joinedTable.Rows.Add(2, "FirstTableRow2", 1, "SecondTableRow1"); 
joinedTable.Rows.Add(3, "FirstTableRow3", 2, "SecondTableRow2"); 

firstTable.Merge(joinedTable, false, MissingSchemaAction.Ignore); 
secondTable.Merge(joinedTable, false, MissingSchemaAction.Ignore); 

관련 리소스 : 여기

은보다 완벽한 예제 나는이 DataTable의 아이디어를 통조림, 심지어 (목록으로 갔다 결국

+0

이 작업을 수행 할 수 없습니다 - 첫 번째 병합 줄에서 "대상 테이블 dtJoined 정의가 누락되었습니다."ItemType_ID가 있습니다. (원본 테이블의 열을 반복하고 조인 된 테이블의 열을 채 웁니다. 그들로부터) ... 또는 나는 그 오류를 오해하고 있습니까? (필자는 'MissingSchemaAction'을 변경하여 이전에 빈 테이블을 반환하는 오류를 볼 수있었습니다.) –

+0

@Jez Clark 세 테이블의 스키마를 게시 할 수 있습니까? –

관련 문제