簡體   English   中英

將完整列從一個數據表移至另一C#

[英]Move complete column from one Data Table to other C#

我需要在兩個數據表之間實現列移動功能。 假設我在數據表1中有{A,B,C}列,在數據表2中有{A}列。

如果我想將列{B,C}移到DataTable 2,該怎么做? 兩個表中的數據應相似。

如果DataTable不是正確的選擇,那么請幫助我如何實現此目標。

可以使用List>-Nested Lists完成嗎? 在下面的代碼中嘗試過,但認為合並不是正確的選擇。

  private void move(DataTable source, DataTable dest, string colname)
    {
        var result = source.AsEnumerable().Select(row => row.Field<string>(colname));
        dest.Columns.Add(colname);
        DataTable dt = source.DefaultView.ToTable(false, colname);

        dest.Merge(dt);          

    }

我是初學者,所以請提出是否還有其他方法可以根據用戶選擇來移動列。

檢查數據表是否有復制選項,例如DataTable dt = new DataTable()dt.copy或dt.clone

有時我已經做到了。 我必須手動編寫用於數據表復制的代碼。 下面的方法完成將丟失的列從源表復制到目標表的工作。 它返回被復制的列名的集合。 第二個函數將數據從源列復制到目標列。 它以主鍵列名作為輸入,並以列名列表為基礎,必須為其復制數據。

public List<string> CopyDistinctColumns(DataTable source, DataTable target)
{
    var copiedColumn = new List<string>();
    for(var x = 0; x < source.Columns.Count; x++)
    {
        var column = source.Columns[x];
        if(!target.Columns.Contains(column.ColumnName))
        {
            var newCol = new DataColumn
            {
                ColumnName = column.ColumnName,
                DataType = column.DataType,
                Caption = column.Caption,
                DefaultValue = column.DefaultValue,
                MaxLength = column.MaxLength,
            };
            copiedColumn.Add(column.ColumnName);
            target.Columns.Add(newCol);
        }
    }
    return copiedColumn;
}

public void CopyData(DataTable source, DataTable target, string primaryKeyColumnName, List<string> copiedColumns)
{
    for (var i = 0; i < source.Rows.Count; i++)
    {
        var row = source.Rows[i];
        var primaryKeyValue = row[primaryKeyColumnName];
        for (var j = 0; j < target.Rows.Count; j++)
        {
            var trow = target.Rows[j];
            if (trow[primaryKeyColumnName].Equals(primaryKeyValue))
            {
                foreach (var col in copiedColumns)
                {
                    trow[col] = row[col];
                }
                break;
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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