【问题标题】:How to cut DataTable's Columns by using a string array?如何使用字符串数组剪切 DataTable 的列?
【发布时间】:2019-07-25 02:08:24
【问题描述】:
我有一个数据表。如何切出它的列,并返回一个新的DataTable?
我正在尝试使用以下参数创建一个方法:
-
DataTable dt。
- 包含一些字段的字符串数组。
它应该看起来像这样:
public static DataTable cutDataTable(DataTable dt, List<string> fileds)
{
DataTable newDt = null;
// processing code...
return newDt
}
没有例外。
【问题讨论】:
标签:
c#
linq
c#-4.0
datatable
c#-3.0
【解决方案1】:
您可以为此目的使用DataView.ToTable 方法。例如,
var fields = new []{"Age","Id"}; //Fields to be selected.
var result = new DataView(table).ToTable(false, fields);
这将从源表中返回一个新的 DataTable,其中仅包含指定的字段。
【解决方案2】:
如果我理解正确,您正在尝试做这样的事情:
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