我有一个存储过程,用于选择表中行之间的差异,并以下列格式返回DataTable
:
col1_A, col2_A, col3_A, col1_B, col2_B, col3B
我想将DataTable
拆分为2个单独的DataTable
s,看起来像
表A
col1
col2
col3
表B
col1
col2
col3
此代码获取列索引。
foreach (DataColumn col in DT.Columns)
{
if (!col.ColumnName.EndsWith("B"))
tableBIndex += 1;
else
break;
}
但是从这里我不知道如何将行分成2个DataTables。有关实现这一目标的最佳方法的任何想法吗?
答案 0 :(得分:4)
这应该可以解决问题并在一个循环中填充两个表:
DataColumn[] aCols = table.Columns.Cast<DataColumn>()
.Where(c => c.ColumnName.EndsWith("A"))
.Select(c => new DataColumn(c.ColumnName, c.DataType))
.ToArray();
DataColumn[] bCols = table.Columns.Cast<DataColumn>()
.Where(c => c.ColumnName.EndsWith("B"))
.Select(c => new DataColumn(c.ColumnName, c.DataType))
.ToArray();
var TableA = new DataTable();
TableA.Columns.AddRange(aCols);
var TableB = new DataTable();
TableB.Columns.AddRange(bCols);
foreach (DataRow row in table.Rows)
{
DataRow aRow = TableA.Rows.Add();
DataRow bRow = TableB.Rows.Add();
foreach (DataColumn aCol in aCols)
aRow.SetField(aCol, row[aCol.ColumnName]);
foreach (DataColumn bCol in bCols)
bRow.SetField(bCol, row[bCol.ColumnName]);
}
答案 1 :(得分:2)
我建议创建两个新表并复制出这样的值。
DataTable one = new DataTable();
DataTable two = new DataTable();
foreach (DataColumn col in DT.Columns)
{
if (!col.ColumnName.EndsWith("B"))
{
one.Columns.Add(col.ColumnName.Replace("_A", ""));
foreach (DataRow row in DT.Rows)
{
one.Rows.Add(row[col.ColumnName]);
}
}
else
{
one.Columns.Add(col.ColumnName.Replace("_B", ""));
foreach (DataRow row in DT.Rows)
{
two.Rows.Add(row[col.ColumnName]);
}
}
}