[英]Splitting a DataTable into 2 using a column index
我有一個存儲過程,它選擇表中行之間的差異,並以下列格式返回DataTable
:
col1_A, col2_A, col3_A, col1_B, col2_B, col3B
我想將DataTable
分成兩個獨立的DataTable
所以看起來像
表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。 有關實現這一目標的最佳方法的任何想法?
這應該可以解決這個問題並在一個循環中填充兩個表:
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]);
}
我建議創建兩個新表並復制出這樣的值。
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]);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.