【发布时间】:2013-07-27 17:37:16
【问题描述】:
我有一个包含数千行的数据表。有一个名为 EmpID 的列,其中某些行包含“0”。我想从我当前的 DataTable 中删除它们并想创建一个新的正确 DataTable。我不能逐行检查它,因为它包含大量数据。给我一个解决这个问题的建议。
【问题讨论】:
我有一个包含数千行的数据表。有一个名为 EmpID 的列,其中某些行包含“0”。我想从我当前的 DataTable 中删除它们并想创建一个新的正确 DataTable。我不能逐行检查它,因为它包含大量数据。给我一个解决这个问题的建议。
【问题讨论】:
最好的方法是在源头过滤它(如果可能的话) - 所以如果你是从数据库创建它,请使用 where 排除 sql 查询本身中的所有 0 值
从.net 2.0开始,ms在很大程度上增强了对数据表的过滤逻辑。因此,如果您使用数据视图(在数据表顶部)并在其中添加 where 子句并在该字段上添加某种运行时索引,它将为您提供所需的结果而无需遍历所有记录
【讨论】:
您可以使用DataTable.Select("EmpID <> 0")。这将返回一个 DataRows 数组,如果需要,您可以从中创建新的 DataTable。
【讨论】:
是否可以先选择 EmpID = 0 的行,然后仅遍历这些行?
DataTable newTable = new DataTable();
foreach (DataRow dr in oldTable.Select("EmpID = '0'")) {
newTable.Rows.Add(dr);
oldTable.Rows.Remove(dr);
}
【讨论】:
你可以试试
DataRow[] 临时= table.Select("EmpID ='0'");
foreach(DataRow dr in temp) { table.Rows.Remove(dr); }table.acceptchanges();
【讨论】: