我有一个包含超过 100 列的数据表,但我需要删除所有列 除了前 11 列。 我需要保留第 11 列的数据。 我正在使用以下代码完成它
public DataTable validdatatable(DataTable table)
{
DataTable dt = new DataTable();
for (int i = 0; i < 11; i++)
{
DataColumn dc = new DataColumn();
dc.ColumnName = table.Columns[i].ColumnName;
dc.DataType = table.Columns[i].DataType;
dt.Columns.Add(dc);
}
for (int i = 0; i < table.Rows.Count; i++)
{
object[] ob = table.Rows[i].ItemArray;
...
...
}
return dt;
}
此方法有效,但对 CPU 和 RAM 的负担太大。
还有其他方法可以继续吗?
试试这个:
public DataTable validdatatable(DataTable table)
{
var dt = table.Columns.Cast<DataColumn>().Take(11);
return dt.CopyToDataTable();
}
或者类似的东西。它至少会给你一种解决问题的方法。 请注意,您需要添加对程序集的引用:
System.Data.DataSetExtensions.dll
,然后您可以像上面那样编写函数。
你可以试试这个。 唯一的区别是,它不是使用 object[] ob = table.Rows[i].ItemArray,而是使用索引抓取前 11 列,并从中创建一个数组(itemArray 将创建一个包含所有 100 列的数组)。 如果你的记忆力那么紧,我仍然怀疑这能否解决你的记忆问题,但它可能值得一试。
var copyDt = new DataTable();
for (var i = 0; i < 11; i++)
{
copyDt.Columns.Add(dataTable.Columns[i].ColumnName, dataTable.Columns[1].DataType);
}
copyDt.BeginLoadData();
foreach (DataRow dr in dataTable.Rows)
{
copyDt.Rows.Add(Enumerable.Range(0, 11).Select(i => dr[i]).ToArray());
}
copyDt.EndLoadData();
如果您知道要保留的列名称,这应该可行:
NewDataTable = DT.Copy.DefaultView.ToTable(true, "Item", "Standard Number", "Part Size", "Material", "Etc.");
初始
true
是 Distinct
参数。后面是所需的列名称。