Nếu bạn được phép sử dụng LINQ, hãy xem ví dụ sau. Nó tạo ra hai DataTables với các cột nguyên, điền chúng với một số bản ghi, kết hợp chúng bằng cách sử dụng truy vấn LINQ và xuất chúng ra Console.
DataTable dt1 = new DataTable();
dt1.Columns.Add("CustID", typeof(int));
dt1.Columns.Add("ColX", typeof(int));
dt1.Columns.Add("ColY", typeof(int));
DataTable dt2 = new DataTable();
dt2.Columns.Add("CustID", typeof(int));
dt2.Columns.Add("ColZ", typeof(int));
for (int i = 1; i <= 5; i++)
{
DataRow row = dt1.NewRow();
row["CustID"] = i;
row["ColX"] = 10 + i;
row["ColY"] = 20 + i;
dt1.Rows.Add(row);
row = dt2.NewRow();
row["CustID"] = i;
row["ColZ"] = 30 + i;
dt2.Rows.Add(row);
}
var results = from table1 in dt1.AsEnumerable()
join table2 in dt2.AsEnumerable() on (int)table1["CustID"] equals (int)table2["CustID"]
select new
{
CustID = (int)table1["CustID"],
ColX = (int)table1["ColX"],
ColY = (int)table1["ColY"],
ColZ = (int)table2["ColZ"]
};
foreach (var item in results)
{
Console.WriteLine(String.Format("ID = {0}, ColX = {1}, ColY = {2}, ColZ = {3}", item.CustID, item.ColX, item.ColY, item.ColZ));
}
Console.ReadLine();
// Output:
// ID = 1, ColX = 11, ColY = 21, ColZ = 31
// ID = 2, ColX = 12, ColY = 22, ColZ = 32
// ID = 3, ColX = 13, ColY = 23, ColZ = 33
// ID = 4, ColX = 14, ColY = 24, ColZ = 34
// ID = 5, ColX = 15, ColY = 25, ColZ = 35
Điều này cuối cùng có hiệu quả đối với tôi, nhưng tôi đã dành hơn một giờ cho nó, với ngoại lệ "Specified cast not valid", nghi ngờ sự tỉnh táo của tôi, cho đến khi tôi thay đổi từ (int) table1 ["field"] thành Convert.ToInt32 (table1 ["field"]). – CindyH
@CindyH, cảm ơn rất nhiều vì bình luận của bạn, nó đã giúp tôi tiết kiệm thời gian. Tôi đoán điều này là do System.Data.DataTypes, trong đó int không được bao gồm, nhưng Int32 là. Danh sách tất cả DataTypes tại đây: https://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype(v=vs.110).aspx – FrenkyB