Как объединить несколько datatable в один datatable?
Я хочу сравнить несколько файлов с помощью приложения Windows Form в C#. Это коды, которые я пробовал. 3 цикла foreach работают, но когда я добавляю 4-й цикл foreach, он выходит из строя без каких-либо ошибок. Интересно, есть ли какие-то другие методы для объединения нескольких таблиц данных? Я ищу в интернете, что они в основном являются решениями для объединения 2 таблиц данных.
Как вы можете видеть, мне нужно найти разницу между суммами из разных таблиц и провести сравнение.
Пожалуйста, помогите, спасибо!
Что я уже пробовал:
public DataTable Comparison(DataTable A, DataTable B, DataTable C, DataTable D) { var tableC = new DataTable(); tableC.Columns.Add(new DataColumn("Location")); tableC.Columns.Add(new DataColumn("Item Type")); tableC.Columns.Add(new DataColumn("Type")); tableC.Columns.Add(new DataColumn("PO Total Cost(Qty Received)")); tableC.Columns.Add(new DataColumn("Qty Received Actual Cost")); //tableC.Columns.Add(new DataColumn("Total Average Cost (Adjustment)")); //tableC.Columns.Add(new DataColumn("Qty Adjusted Average Cost")); tableC.Columns.Add(new DataColumn("Amount from FlatFile")); tableC.Columns.Add(new DataColumn("Amount (Transaction - Movement)")); tableC.Columns.Add(new DataColumn("Amount (Transaction - FlatFile)")); foreach (DataRow rowA in A.Rows) { foreach (DataRow rowB in B.Rows) { foreach (DataRow rowC in C.Rows) { //foreach (DataRow rowD in D.Rows) //{ if (rowA["Location"].ToString() == rowB["Location"].ToString() && rowA["Item Type"].ToString() == rowB["Item Type"].ToString() && rowA["Location"].ToString().Substring(0, 5).Trim() == rowC["Location"].ToString() && rowA["Item Type"].ToString() == rowC["Item_Type"].ToString()) //&& rowA["Location"].ToString() == rowD["Location"].ToString() && rowA["Item Type"].ToString() == rowD["Item Type"].ToString() //&& rowB["Location"].ToString() == rowD["Location"].ToString() && rowB["Item Type"].ToString() == rowD["Item Type"].ToString()) { var newRow = tableC.NewRow(); newRow["Location"] = rowB["Location"]; newRow["Item Type"] = rowB["Item Type"]; newRow["Type"] = rowC["Type"]; if (rowC["Type"].ToString() == "GRN") { newRow["PO Total Cost(Qty Received)"] = rowA["PO Total Cost(Qty Received)"]; newRow["Qty Received Actual Cost"] = rowB["Qty Received Actual Cost"]; newRow["Amount from FlatFile"] = rowC["Amount"]; newRow["Amount (Transaction - Movement)"] = Convert.ToDouble(rowA["PO Total Cost(Qty Received)"]) - Convert.ToDouble(rowB["Qty Received Actual Cost"]); newRow["Amount (Transaction - FlatFile)"] = Convert.ToDouble(rowA["PO Total Cost(Qty Received)"]) - Convert.ToDouble(rowC["Amount"]); } else if (rowC["Type"].ToString() == "STK-ADJ") { //newRow["Qty Adjusted Average Cost"] = rowB["Qty Adjusted Average Cost"]; //newRow["Total Average Cost (Adjustment)"] = rowD["Total Average Cost3"]; } tableC.Rows.Add(newRow); } } //} } } return tableC; }