C# 如何在不迭代的情况下从庞大的数据表中删除行?

C# 如何在不迭代的情况下从庞大的数据表中删除行?,c#,asp.net,C#,Asp.net,我有一个包含数千行的数据表。有一个名为EmpID的列,其中包含某些行的“0”。我想从当前数据表中删除它们,并创建一个新的正确数据表。我无法逐行检查它,因为它包含大量数据。给我一个克服这个问题的建议 您可以使用数据表。选择(“EmpID 0”)。这将返回一个DataRows数组,如果需要,您可以从中创建新的DataTable。是否可以先选择EmpID=0的行,然后仅迭代这些行 DataTable newTable = new DataTable(); foreach

我有一个包含数千行的数据表。有一个名为EmpID的列,其中包含某些行的“0”。我想从当前数据表中删除它们,并创建一个新的正确数据表。我无法逐行检查它,因为它包含大量数据。给我一个克服这个问题的建议

您可以使用
数据表。选择(“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);
        }

最好的方法是在源代码处对其进行过滤(如果可能的话)——因此,如果您是从数据库中创建它,请使用where排除sql查询本身中的所有0值

从.NET2.0开始,ms在很大程度上增强了datatable上的过滤逻辑。因此,如果您使用dataview(在datatable的顶部)并在其中添加where子句,并在该字段上添加某种运行时索引,它将在不遍历所有记录的情况下提供所需的结果

数据行[]温度= table.Select(“EmpID='0'”

表.acceptchanges()


我没有注意到您还想将行移动到新表,更新了答案我感谢您的回答,因为您给了我dataview的想法。谢谢我会试试这个,然后回到美国。
  foreach(DataRow dr in temp)
    {
     table.Rows.Remove(dr);
    }