Code 1
using System;
using System.Data;
using System.Linq;
var dt = new DataTable();
var idColumn = new DataColumn("id", typeof(int));
var valueColumn = new DataColumn("value", typeof(string));
dt.Columns.Add(idColumn);
dt.Columns.Add(valueColumn);
dt.Rows.Add(1, "text");
dt.Rows.Add(2, "text1|test2");
dt.Rows.Add(3, "text1|test2|text3");
foreach (var row in dt.Rows.Cast<DataRow>().ToArray())
{
var id = row.Field<int>("id");
var value = row.Field<string>("value");
foreach (var v in value.Split('|'))
{
dt.Rows.Add(id, v);
}
row.Delete();
}
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
Console.Write($"{row[column]} ");
}
Console.WriteLine();
}
결과 :
1 text
2 text1
2 test2
3 text1
3 test2
3 text3
Code 2
using System;
using System.Data;
using System.Linq;
var dt = new DataTable();
var idColumn = new DataColumn("id", typeof(int));
var valueColumn = new DataColumn("value", typeof(string));
dt.Columns.Add(idColumn);
dt.Columns.Add(valueColumn);
dt.Rows.Add(1, "text");
dt.Rows.Add(2, "text1|test2");
dt.Rows.Add(3, "text1|test2|text3");
var result = dt.AsEnumerable().SelectMany(r => r.Field<string>("value")
.Split('|')
.Select(x => new
{
id = r.Field<int>("id"),
value = x
})
).ToArray();
foreach (var pair in result)
{
Console.WriteLine($"{pair.id} {pair.value}");
}
결과 :
1 text
2 text1
2 test2
3 text1
3 test2
3 text3