Как сравнить данные каждой строки между 2 datatable C#? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть 2 таблицы данных из 2 разных sql (мс SQL и MySQL) с одним аналогичным столбцом данных.

DataTable 1: employeeeno, device, devicestatus

DataTable 2: employeeeno, name, employeeestatus

Мне, вероятно, нужно запустить foreach с несколькими IF в Datatable 1 снова в Datatable2 и поместить результат в Datatable3 следующим образом:

     DataTable ResultDataTable = new DataTable("ResultDataTable");
            foreach (DataRow dr in myPHPdt.Rows)
            {
                string checkEmpNo = dr.Table.Rows;
                myPHPdt.Select(checkEmpNo);
                if (/*Some Condition here*/ )
                {
                    if (/*Some Condition here*/ )
                    {
                        if (checkEmpNo = '999999')
                        {
                            LMTF.LogMessageToFile("This is skipped");
                        }
                        ResultDataTable.Rows.Add(dr.ItemArray);
                        DefaultCellStyle.BackColor = Color.Red;
                    }
                    ResultDataTable.Rows.Add(dr.ItemArray);
                }
            }
            dataGridView3.DataSource = ResultDataTable;

Проблема у меня есть, как я проверяю каждую строку employeeeno с несколькими IF в DataTable1 для сравнения с DataTable2?

Также что-то не так с частью "string checkEmpNo = dr.Table.Rows", поскольку предполагается, что она возвращает имя сотрудника строки, в которой оно находится в данный момент.

Требование:

Если Employeeno в DataTable1 существует в DataTable2 - Добавить в строки DataTable3.

Если состояние Employee Employeeo прекращено - Добавьте в DataTable3 строки с красным цветом строки.

Если сотрудники в DataTable1 равны 999999, ничего не делать.

Возможно ли это вообще сделать без h Метод сравнения DataTable?

Есть ли лучший способ сделать это?

Изменить 1 - 12/3/2020

Я пробовал это - но он не дал никакого результата, хотя и показал имена столбцов. (кажется, что DataRows пусты)

DataTable targetTable = new DataTable();


            var dt2Columns = myPHPdt.Columns.OfType<DataColumn>().Select(dc => new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping));
            var dt2FinalColumns = from dc in dt2Columns.AsEnumerable()
                                  where targetTable.Columns.Contains(dc.ColumnName) == false
                                  select dc;

            targetTable.Columns.AddRange(dt2FinalColumns.ToArray());

            var rowData = from row1 in myPHPdt.AsEnumerable()
                          join row2 in orisoftdt.AsEnumerable()
                          on row1["employeeno"] equals row2["EMPLOYEE_ID"]
                          select row1.ItemArray.Concat(row2.ItemArray.Where(r2 => row1.ItemArray.Contains(r2) == false)).ToArray();

            foreach (object[] values in rowData)
                targetTable.Rows.Add(values);


            dataGridView3.DataSource = targetTable;

1 Ответ

0 голосов
/ 12 марта 2020

После нескольких тестов с несколькими типами методов в Joins я прибегнул к ручному добавлению строки за строкой в ​​Datatable.

С этим - вот мой ответ на мой собственный вопрос:

private void Button2_Click(object sender, EventArgs e)
        {
            var LMTF = new LogToFile();

            DataTable targetTable = new DataTable();
            targetTable.Columns.Add("ID", typeof(string));
            LMTF.LogMessageToFile("Column Employee Addedd");
            targetTable.Columns.Add("MACADDRESS", typeof(string));
            LMTF.LogMessageToFile("Column EMPLOYEE_ID Addedd");
            targetTable.Columns.Add("REMARKS", typeof(string));
            LMTF.LogMessageToFile("Column EMPLOYEE_NAME Addedd");
            targetTable.Columns.Add("STAFF ID", typeof(string));
            LMTF.LogMessageToFile("Column EMPLOYEE_STATUS Addedd");
            targetTable.Columns.Add("STAFF NAME", typeof(string));
            LMTF.LogMessageToFile("Column username Addedd");
            targetTable.Columns.Add("Status", typeof(string));
            LMTF.LogMessageToFile("Column comment Addedd");

            try
            {
                foreach (DataRow row in myPHPdt.Rows)
                {
                    string emp1 = row["employeeno"].ToString();
                    string emp2 = row["username"].ToString();
                    string emp3 = row["comment"].ToString();
                    string empcheck = "";
                    string ActiveStaff = "A";
                    LMTF.LogMessageToFile("This is before emp1 check" + emp1 + " " + emp2 + " " + emp3);
                    if (emp1 != empcheck) /*Checks if entry is not null*/
                    {
                        try
                        {
                            orisoftds.Tables["Staff_List"].DefaultView.RowFilter = "EMPLOYEE_ID = " + emp1;
                            DataTable dt = (orisoftds.Tables[0].DefaultView).ToTable();


                            foreach (DataRow orirow in dt.Rows)
                            {
                                SID = orirow["EMPLOYEE_ID"].ToString();
                                sName = orirow["EMPLOYEE_NAME"].ToString();
                                sStatus = orirow["EMPLOYEE_STATUS"].ToString();
                            }
                        }
                        catch (System.Exception ex)
                        {
                            LMTF.LogMessageToFile("something wrong with checking orisoft : " + ex.Message);
                        }
                        if (sStatus != ActiveStaff) /*Checks if Staff is NOT active*/
                        {
                            targetTable.Rows.Add(emp1, emp2, emp3, SID, sName, sStatus);
                            LMTF.LogMessageToFile("Log Non Active Staff" + emp1 + " " + emp2 + " " + emp3 + SID + sName + sStatus);
                        }
                        else
                        {
                            LMTF.LogMessageToFile("Log Active Staff" + emp1 + " " + emp2 + " " + emp3 + SID + sName + sStatus);
                        }
                    }
                    else
                    {
                        targetTable.Rows.Add(emp1+"noid", emp2, emp3, SID, sName, sStatus);
                        LMTF.LogMessageToFile(emp1 + "noid " + emp2 + " " + emp3 + SID + sName + sStatus);
                    }
                }
            }
            catch (System.Exception ex)
            {
                LMTF.LogMessageToFile("something wrong with adding rows to datatable : " + ex.Message);
            }
            try
            {
                dataGridView3.DataSource = targetTable;
            }
            catch (System.Exception ex)
            {
                LMTF.LogMessageToFile("something wrong with  : " + ex.Message);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...