【问题标题】:How to remove rows from huge data table without iterating it?如何在不迭代的情况下从庞大的数据表中删除行?
【发布时间】:2013-07-27 17:37:16
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    最好的方法是在源头过滤它(如果可能的话) - 所以如果你是从数据库创建它,请使用 where 排除 sql 查询本身中的所有 0 值

    从.net 2.0开始,ms在很大程度上增强了对数据表的过滤逻辑。因此,如果您使用数据视图(在数据表顶部)并在其中添加 where 子句并在该字段上添加某种运行时索引,它将为您提供所需的结果而无需遍历所有记录

    【讨论】:

    • 感谢您的回答让我了解了 dataview。谢谢。我会试试这个,然后回到你身边。
    【解决方案2】:

    您可以使用DataTable.Select("EmpID <> 0")。这将返回一个 DataRows 数组,如果需要,您可以从中创建新的 DataTable。

    【讨论】:

      【解决方案3】:

      是否可以先选择 EmpID = 0 的行,然后仅遍历这些行?

              DataTable newTable = new DataTable();
              foreach (DataRow dr in oldTable.Select("EmpID = '0'")) {
                  newTable.Rows.Add(dr);
                  oldTable.Rows.Remove(dr);
              }
      

      【讨论】:

      • 我错过了您还想将行移动到新表中,更新了答案
      【解决方案4】:

      你可以试试

      DataRow[] 临时= table.Select("EmpID ='0'");

        foreach(DataRow dr in temp)
          {
           table.Rows.Remove(dr);
          }
      

      table.acceptchanges();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多