Tôi đã tìm thấy giải pháp không dựa vào việc lặp qua các cột.
Phương thức này sử dụng phương pháp 'Hợp nhất' mà trước đây tôi đã loại bỏ vì tôi nghĩ cả hai bảng đều yêu cầu cùng một cấu trúc.
Trước tiên, bạn cần phải tạo ra một khóa chính trên hai dữ liệu bảng:
// set primary key
T1.PrimaryKey = new DataColumn[] { T1.Columns["DateStamp"] };
T2.PrimaryKey = new DataColumn[] { T2.Columns["DateStamp"] };
Sau đó thêm cả hai bảng vào một dữ liệu thiết lập nên một mối quan hệ có thể được thêm vào:
// add both data-tables to data-set
DataSet dsContainer = new DataSet();
dsContainer.Tables.Add(T1);
dsContainer.Tables.Add(T2);
Tiếp theo thêm mối quan hệ giữa hai cột chính trong tập dữ liệu:
// add a relationship between the two timestamp columns
DataRelation relDateStamp = new DataRelation("Date", new DataColumn[] { T1.Columns["DateStamp"] }, new DataColumn[] { T2.Columns["DateStamp"] });
dsContainer.Relations.Add(relDateStamp);
Cuối cùng, bạn có thể sao chép tệp đầu tiên dữ liệu bảng vào một phiên bản 'kết hợp' mới, và sau đó hợp nhất trong lần thứ hai:
// populate combined data
DataTable dtCombined = new DataTable();
dtCombined = T1.Copy();
dtCombined.Merge(T2, false, MissingSchemaAction.Add);
Lưu ý: Phương pháp Merge đòi hỏi đối số thứ hai là sai hoặc nếu không nó sao chép cấu trúc nhưng không phải là dữ liệu thứ hai bàn.
này sau đó sẽ kết hợp các bảng sau:
T1 (2012-05-09, 111, 222)
T2 (2012-05-09, 333, 444, 555)
vào một phiên bản kết hợp dựa trên khóa chính:
J1 (2012-05-09, 111, 222, 333, 444, 555)
Bạn có thể sử dụng "LINQ" không? –
Bạn có thể đưa ra ví dụ về một số dữ liệu sẽ là kết quả bạn muốn không? –
Tôi không nghĩ rằng LINQ là một lựa chọn vì bạn sẽ cần phải biết tên cột bạn đang cố gắng để dự án vào. – finoutlook