Поиск и изменение дубликатов значений в DataTable

Не получается правильно подставить рандомные значения вместо дубликатов. На выходе у меня повторяются мои же новые значения, что я делаю не так? Покажите простую реализацию данной задачи Не получается правильно подставить рандомные значения вместо дубликатов. На выходе у меня повторяются мои же новые значения, что я делаю не так? Покажите простую реализацию данной задачи

foreach (DataRow row_1 in datatable.Rows)
{
    int k = 0;

    string UNP_1 = "-666";
    string UNP_dop_1 = "-666";
    string Ninv_1 = "-666";

    foreach (DataColumn column_1 in datatable.Columns)
    {
        if (column_1.ColumnName == "UNP")
            UNP_1 = row_1[column_1].ToString();

        if (column_1.ColumnName == "UNP_dop")
            UNP_dop_1 = row_1[column_1].ToString();

        if (column_1.ColumnName == "Ninv")
            Ninv_1 = row_1[column_1].ToString();

        if (UNP_1 != "-666" && UNP_dop_1 != "-666" && Ninv_1 != "-666")
        {
            //----
            foreach (DataRow row_2 in datatable_2.Rows)
            {
                string UNP_2 = "-666";
                string UNP_dop_2 = "-666";
                string Ninv_2 = "-666";

                foreach (DataColumn column_2 in datatable_2.Columns)
                {
                    if (column_2.ColumnName == "UNP")
                        UNP_2 = row_2[column_2].ToString();

                    if (column_2.ColumnName == "UNP_dop")
                        UNP_dop_2 = row_2[column_2].ToString();

                    if (column_2.ColumnName == "Ninv")
                        Ninv_2 = row_2[column_2].ToString();

                    if (UNP_2 != "-666" && UNP_dop_2 != "-666" && Ninv_2 != "-666")
                    {
                        if (datatable.Rows.IndexOf(row_1) != datatable_2.Rows.IndexOf(row_2) && Convert.ToInt32(UNP_1) == Convert.ToInt32(UNP_2) && UNP_dop_1 == UNP_dop_2 && Convert.ToInt32(Ninv_1) == Convert.ToInt32(Ninv_2))
                        {
                            k++;

                            if (Repair_Ninv_checkBox1.Checked == true)
                            {
                                Test_data_richTextBox1.AppendText("                                -> -> " + Ninv_1 + " > 1 (" + datatable.Rows.IndexOf(row_1) + " строка)" + "\n");

                                string Ninv_OLD = row_1[column_1].ToString();

                                //MessageBox.Show(datatable.Rows.IndexOf(row_1).ToString() + "----" + datatable_2.Rows.IndexOf(row_2).ToString() + "----" + Ninv_1 + "----" + Ninv_2);

                                Random rand = new Random();
                                row_1[column_1] = rand.Next(999999);

                                string Ninv_New = row_1[column_1].ToString();

                                Load_data_richTextBox1.AppendText("Repair_Ninv_FILE: " + Ninv_OLD + "->-> " + Ninv_New + " (" + datatable.Rows.IndexOf(row_1) + " строка)" + "\n");

                                foreach (DataRow row_3 in datatable_2.Rows)
                                {
                                    foreach (DataColumn column_3 in datatable_2.Columns)
                                    {
                                        string UNP_3 = "-666";
                                        string UNP_dop_3 = "-666";
                                        string Ninv_3 = "-666";

                                        if (column_3.ColumnName == "UNP")
                                            UNP_3 = row_3[column_3].ToString();

                                        if (column_3.ColumnName == "UNP_dop")
                                            UNP_dop_3 = row_3[column_3].ToString();

                                        if (column_3.ColumnName == "Ninv")
                                            Ninv_3 = row_3[column_3].ToString(); ;

                                        if (UNP_3 != "-666" && UNP_dop_3 != "-666" && Ninv_3 != "-666")
                                        {
                                            if (datatable.Rows.IndexOf(row_1) == datatable_2.Rows.IndexOf(row_3) && Convert.ToInt32(UNP_1) == Convert.ToInt32(UNP_3) && UNP_dop_1 == UNP_dop_3 && Convert.ToInt32(Ninv_1) == Convert.ToInt32(Ninv_3))
                                            {
                                                row_3[column_3] = Ninv_New;
                                                return;
                                            }

                                            UNP_3 = "-666";
                                            UNP_dop_3 = "-666";
                                            Ninv_3 = "-666";
                                        }
                                    }
                                }
                            }
                        }

                        UNP_2 = "-666";
                        UNP_dop_2 = "-666";
                        Ninv_2 = "-666";
                    }
                }
            }

            if (Repair_Ninv_checkBox1.Checked == false && k > 0)
                Test_data_richTextBox1.AppendText("                                -> -> " + Ninv_1 + " > 1 (" + datatable.Rows.IndexOf(row_1) + " строка)" + "\n");
            //----

            UNP_1 = "-666";
            UNP_dop_1 = "-666";
            Ninv_1 = "-666";
        }
    }
}

Вывод

Repair_Ninv_FILE: 000033->-> 491186 (3 строка)
Repair_Ninv_FILE: 000001->-> 491186 (4 строка)
Repair_Ninv_FILE: 000030->-> 849990 (11 строка)
Repair_Ninv_FILE: 000029->-> 686370 (12 строка)
Repair_Ninv_FILE: 000001->-> 686370 (13 строка)
Repair_Ninv_FILE: 0000031->-> 686370 (14 строка)
Repair_Ninv_FILE: 686370->-> 45176 (14 строка)
Repair_Ninv_FILE: 000037->-> 45176 (19 строка)
Repair_Ninv_FILE: 45176->-> 403981 (19 строка)
Repair_Ninv_FILE: 000112->-> 403981 (20 строка)
Repair_Ninv_FILE: 000110->-> 240361 (24 строка)
Repair_Ninv_FILE: 240361->-> 240361 (24 строка)
Repair_Ninv_FILE: 000039->-> 599165 (26 строка)
Repair_Ninv_FILE: 599165->-> 957970 (26 строка)
Repair_Ninv_FILE: 000089->-> 794350 (30 строка)
Repair_Ninv_FILE: 794350->-> 794350 (30 строка)
Repair_Ninv_FILE: 000014->-> 794350 (32 строка)
Repair_Ninv_FILE: 000015->-> 153155 (33 строка)
Repair_Ninv_FILE: 000016->-> 153155 (34 строка)
Repair_Ninv_FILE: 000110->-> 989534 (35 строка)
Repair_Ninv_FILE: 989534->-> 989534 (35 строка)
Repair_Ninv_FILE: 000019->-> 348340 (36 строка)
Repair_Ninv_FILE: 000036->-> 348340 (37 строка)
Repair_Ninv_FILE: 348340->-> 707145 (37 строка)
Repair_Ninv_FILE: 0000037->-> 707145 (38 строка)
Repair_Ninv_FILE: 707145->-> 543525 (38 строка)
Repair_Ninv_FILE: 000090->-> 543525 (39 строка)
Repair_Ninv_FILE: 000039->-> 902329 (40 строка)
Repair_Ninv_FILE: 902329->-> 97515 (40 строка)
Repair_Ninv_FILE: 0000089->-> 97515 (41 строка)
Repair_Ninv_FILE: 97515->-> 456319 (41 строка)
Repair_Ninv_FILE: 0000036->-> 456319 (42 строка)
Repair_Ninv_FILE: 456319->-> 292699 (42 строка)
Repair_Ninv_FILE: 000110->-> 292699 (46 строка)
Repair_Ninv_FILE: 292699->-> 651504 (46 строка)
Repair_Ninv_FILE: 0000112->-> 651504 (47 строка)
Repair_Ninv_FILE: 000038->-> 846689 (61 строка)
Repair_Ninv_FILE: 000048->-> 846689 (65 строка)
Repair_Ninv_FILE: 31->-> 205494 (67 строка)
Repair_Ninv_FILE: 205494->-> 205494 (67 строка)
Repair_Ninv_FILE: 000031->-> 564299 (68 строка)
Repair_Ninv_FILE: 564299->-> 564299 (68 строка)
Repair_Ninv_FILE: 000040->-> 400679 (69 строка)
Repair_Ninv_FILE: 400679->-> 400679 (69 строка)
Repair_Ninv_FILE: 000054->-> 759483 (70 строка)
Repair_Ninv_FILE: 000036->-> 759483 (71 строка)
Repair_Ninv_FILE: 759483->-> 595863 (71 строка)
Repair_Ninv_FILE: 000038->-> 954668 (74 строка)
Repair_Ninv_FILE: 000039->-> 313474 (75 строка)
Repair_Ninv_FILE: 313474->-> 313474 (75 строка)
Repair_Ninv_FILE: 000014->-> 149853 (84 строка)
Repair_Ninv_FILE: 000089->-> 508658 (86 строка)
Repair_Ninv_FILE: 508658->-> 508658 (86 строка)
Repair_Ninv_FILE: 000090->-> 867463 (87 строка)
Repair_Ninv_FILE: 000054->-> 703843 (95 строка)
Repair_Ninv_FILE: 000037->-> 703843 (96 строка)
Repair_Ninv_FILE: 703843->-> 62648 (96 строка)
Repair_Ninv_FILE: 000019->-> 62648 (97 строка)
Repair_Ninv_FILE: 000029->-> 899027 (98 строка)
Repair_Ninv_FILE: 000017->-> 257833 (105 строка)
Repair_Ninv_FILE: 000016->-> 257833 (107 строка)
Repair_Ninv_FILE: 000040->-> 616638 (113 строка)
Repair_Ninv_FILE: 616638->-> 453017 (113 строка)
Repair_Ninv_FILE: 000017->-> 811822 (116 строка)
Repair_Ninv_FILE: 000040->-> 811822 (117 строка)
Repair_Ninv_FILE: 811822->-> 170628 (117 строка)
Repair_Ninv_FILE: 000048->-> 170628 (119 строка)
Repair_Ninv_FILE: 000015->-> 7008 (124 строка)
Repair_Ninv_FILE: 000030->-> 365812 (125 строка)
Repair_Ninv_FILE: 000033->-> 202192 (127 строка)

Ответы (1 шт):

Автор решения: ev l
            int oldValue = -666;

            Random random = new Random();

            DataView dataview = datatable.DefaultView;
            dataview.Sort = "Ninv ASC";
            datatable = dataview.ToTable();

            foreach (DataRow row in datatable.Rows)
            {
                foreach (DataColumn column in datatable.Columns)
                {
                    if (column.ColumnName == "Ninv")
                        if (Convert.ToInt32(row[column]) == oldValue)
                        {
                            row[column] = random.Next(999999);

                            oldValue = Convert.ToInt32(row[column]);
                        }
                        else
                            oldValue = Convert.ToInt32(row[column]);
                }
            }
→ Ссылка