Как создать дубликаты строк на основе некоторых условий? - PullRequest
0 голосов
/ 23 августа 2011

My Datatable содержит несколько столбцов, которые содержат данные в формате 2011 ~ | ~ 2012 ~ | ~ 2013. Теперь в таблице только один ряд. Но исходя из того, сколько таких данных существует, нужно создать столько строк

Следовательно, в вышеуказанном формате должны быть созданы три строки, каждая из которых имеет столбец Year, заполненный как 2011, 2012 и 2013. Не имеет значения, что, если дублируются другие столбцы

Формат, аналогичный столбцу Year, также существует для еще 2-3 столбцов, таких как значения столбца Sales в виде 190 ~ | ~ 250 ~ | ~ 488.

Одно важное примечание: количество строк здесь должно быть 3 (учитывая год и столбец продаж). Не должно быть 9 (3 х 3). Существует взаимно-однозначное отношение, скажем, в 2011 году объем продаж составил 190 млн долларов, в 2012 году - 250 млн долларов, а в 2013 году - 488 млн долларов.

Изображение ниже объясняет более подробно.

Полагаю, фундамент очищен. Если нет, дайте мне знать.

Пожалуйста, руководство

Image Added

1 Ответ

3 голосов
/ 23 августа 2011

Вы ищете что-то подобное?

private DataTable AlterDataTable(DataTable oldTable)
{
    DataTable newTable = oldTable.Clone();
    foreach (DataRow row in oldTable.Rows)
    {
        var years = row["Year"]
        .ToString()
        .Split(new string[] { "~|~" }, StringSplitOptions.RemoveEmptyEntries)
        .ToList();
        foreach (var year in years)
        {
            row["Year"] = year;
            newTable.ImportRow(row);
        }

    }

    return newTable;
}

Назовите это как DataTable dataTable = AlterDataTable(dt);

Для этого требования попробуйте это

private DataTable AlterDataTable(DataTable oldTable)
{
    DataTable newTable = oldTable.Clone();
    foreach (DataRow row in oldTable.Rows)
    {
        var years = row["Year"]
        .ToString()
        .Split(new string[] { "~|~" }, StringSplitOptions.RemoveEmptyEntries)
        .ToList();
        var sales = row["Sales"]
        .ToString()
        .Split(new string[] { "~|~" }, StringSplitOptions.RemoveEmptyEntries)
        .ToList();
        if (years.Count != sales.Count)
        {
            throw new Exception("Argument count mismatch exception");
        }
        for (var i = 0; i < years.Count; i++)
        {
            row["Year"] = years[i];
            row["Sales"] = sales[i];
            newTable.ImportRow(row);
        }
    }
    return newTable;
}

Обратите внимание, чторазделение должно иметь одинаковое количество.

...