如何通过使用字符串数组削减DataTable的列?

时间:2019-07-25 02:08:24

标签: c# linq c#-4.0 datatable c#-3.0

我有一个数据表。如何削减其列,并返回一个新的DataTable?

我正在尝试使用以下参数创建方法:

  • DataTable dt
  • 包含一些字段的字符串数组。

它应该看起来像这样:

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

          // processing code...

        return newDt
    }

没有例外。

2 个答案:

答案 0 :(得分:1)

您可以为此目的使用DataView.ToTable方法。例如,

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

这将从源表返回仅包含指定字段的新DataTable。

答案 1 :(得分:0)

如果我对您的理解正确,则您正在尝试执行以下操作:

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