Создайте несколько строк DataTable на основе столбца со значениями, разделенными запятыми - PullRequest
2 голосов
/ 25 сентября 2019

Я пытаюсь проанализировать значение через запятую в строке DataTable и создать отдельные строки из него.

Вот пример таблицы, с которой я начинаю:

ID Date        Places
1  09/24/2019  Paris,Tokyo,Rome
2  09/23/2019  London,Florence,Barcelona
3  09/22/2019  Vienna,Rome,London

Мой вывод DataTable должен выглядеть следующим образом:

ID Date        Places
1  09/24/2019  Paris
1  09/24/2019  Tokyo
1  09/24/2019  Rome 
2  09/23/2019  London
2  09/23/2019  Florence
2  09/23/2019  Barcelona
3  09/22/2019  Vienna
3  09/22/2019  Rome
3  09/22/2019  London

Вот мой код:

for (int i = 0; i < dataTable.Rows.Count; i++)
{
    string[] places = dataTable.Rows[i][2].ToString().Split(',');

    if (places.Length > 1)
    {
        foreach (string s in places)
        {
            //create a new datarow 
            //get the values for row[i] (ID and Date)
            //assign the place 
        }
    }
}

Мне нужна помощь в foreach.

1 Ответ

1 голос
/ 25 сентября 2019

Вы можете разбить свои места на несколько строк, например:

// Use ToList() here so that we can modify the table while iterating over the original rows
foreach (DataRow row in dataTable.Rows.Cast<DataRow>().ToList())
{
    int id = row.Field<int>("ID");
    string date = row.Field<string>("Date");
    string places = row.Field<string>("Places");

    foreach (string place in places.Split(','))
    {
        dataTable.Rows.Add(id, date, place);
    }

    row.Delete();  // delete the original row
}

Примечание: метод расширения Field<T>() определен в System.Data.DataSetExtensions, поэтому вам понадобится ссылка на эту сборку в вашемпроект, если вы хотите использовать этот метод.

Рабочая демонстрация: https://dotnetfiddle.net/zYSWlv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...