【问题标题】:Delete rows from DataTable at once without loop where a column has Null value一次从 DataTable 中删除行,无需循环,其中列具有 Null 值
【发布时间】:2015-04-12 08:43:52
【问题描述】:

我正在从 Excel 工作表中填充一个 DataTable 对象。我不指望用户正确输入数据,我想删除 A 列中具有空值的行。我已经搜索了很多,看起来每个人都在使用 for 循环执行此操作.这是问题所在:757,000 行。如果数据格式不正确,则 DataTable 会被 Excel 的最大值 1048575 填满。我不需要单独检查每个值。在 SQL Server 中,您可以编写:

DELETE table WHERE columnA IS NULL

我考虑在 DataTable 填充中排除空值,但我无法让它可靠地工作,因为我不知道列 A 的名称,直到它在 DataTable 中,有时列名称中有一个 \n 字符中间抛出语法错误。

我怎样才能在没有循环的情况下完成同样的事情?

【问题讨论】:

  • 您要从源工作簿中删除行还是不将它们显示在数据表中?你是怎么读 excel 的?
  • 你不能实现 DataTable 的Select() 方法来过滤并可能从那里填充一个 DataTable..?还有IN SQL Server你的语法不正确..它是DELETE [FROM TABLE NAME] WHERE Clause
  • @DStanley 真的我只是希望它们不在数据表中。

标签: c# datatable delete-row import-from-excel


【解决方案1】:

如何从您的第一个数据表创建一个新的、干净的数据表?

DataTable t = new DataTable(); //actually your existing one with bad records
DataTable newTable = t.Select().Where(x => !x.IsNull(0)).CopyToDataTable();

【讨论】:

    【解决方案2】:

    只需使用 Linq...

    var newData = (from d in DataTable //this would be your datatable. 
                  where d.columnA != NULL
                  select d.*).CopyToDataTable<DataRow>();
    

    然后只需使用你的 newData 变量,它保存你新填充的数据表。

    【讨论】:

      猜你喜欢
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2016-08-28
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 2015-06-13
      相关资源
      最近更新 更多