我的数据表有一些列包含格式为2011〜| ~2012~ | ~2013的数据。现在该表只有一行。但根据有多少这样的数据,应该创建许多行
因此,在上述格式中,应创建三行,每行都填写2011年,2012年和2013年的年份列。如果其他列重复,则无关紧要
类似于Year列的格式也存在大约2-3个列,例如Sales列状态数字为190~ | ~250~ | ~488。
一个重要注意事项:此处的行数应为3(考虑年份和销售列)。它不应该是9(3 x 3)。有一对一的关系,比如2011年的销售额是1.9亿美元,2012年是2.5亿美元,2013年的预期是4.88亿美元。
下图更详细解释。
我猜基础已经清除。如果没有,请告诉我。
请指导
答案 0 :(得分:3)
你在找这样的东西吗?
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;
}
请注意,拆分应具有相同的计数。