我有一个包含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上太重了。
我还有其他方法可以继续吗?
答案 0 :(得分:1)
试试这个:
public DataTable validdatatable(DataTable table)
{
var dt = table.Columns.Cast<DataColumn>().Take(11);
return dt.CopyToDataTable();
}
或类似的东西。它至少会给你一种方法来处理它。
请注意,您需要添加对程序集的引用:System.Data.DataSetExtensions.dll
然后您可以像上面一样编写函数。
答案 1 :(得分:0)
你可以试试这个。唯一的区别是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();