如何使用字符串数组切割DataTable的列?

How to cut DataTable's Columns by using a string array?

我有一个数据表。如何切出它的列,并return一个新的DataTable?

我正在尝试创建一个具有以下参数的方法:

它应该看起来像这样:

    public static DataTable cutDataTable(DataTable dt, List<string> fileds)
    {
        DataTable newDt = null;

          // processing code...

        return newDt
    }

没有例外。

如果我没理解错的话,你正试图做这样的事情:

public static DataTable CutDataTable(DataTable dt, IList<string> columnsToRemove,
                                     bool keepData = true)
{
    DataTable newDt = (keepData ? dt.Copy() : dt.Clone());
    foreach (string colName in columnsToRemove)
    {
        if (!newDt.Columns.Contains(colName)) continue;
        newDt.Columns.Remove(colName);
    }

    return newDt;
}

用法:

var dt = new DataTable();
dt.Columns.Add("Column1");
dt.Columns.Add("Column2");
dt.Columns.Add("Column3");
dt.Columns.Add("Column4");

dt.Rows.Add("1", "2", "3", "4");

var newDt = CutDataTable(dt, new[] { "Column3", "Column4" });
Console.WriteLine("New column count = " + newDt.Columns.Count);
Console.WriteLine("First row data: " + string.Join(",", newDt.Rows[0].ItemArray));

输出:

New column count = 2
First row data: 1,2

您可以使用 DataView.ToTable 方法来达到目的。例如,

var fields = new []{"Age","Id"}; //Fields to be selected.
var result = new DataView(table).ToTable(false, fields);

这将 return 来自源 table 的新数据表,仅包含指定的字段。