簡體   English   中英

使用列索引將DataTable拆分為2

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM