2

我有一个从 excel 电子表格中读取数据的代码,我已经走了这么远,在 SO 上有一些答案

DataTable dt = ds.Tables[0];
dt = dt.AsEnumerable().Where((row, index) => index > 4).CopyToDataTable();
DataTable filteredRows = dt.Rows.Cast<DataRow>().Where(row => row.ItemArray.All(field => !(field is System.DBNull))).CopyToDataTable();

有这个

dt.Rows.Cast<DataRow>().Where(row => row.ItemArray.All(field => (field is System.DBNull)))

返回所有为空的行。

我也试过Any了,它没有给出所需的输出

上面的代码适用于所有字段都不为 NULL 的情况,即每列都有一个字段。这免除了所有缺少 1 列的行,但这不是我想要的。

我想免除所有列都为空的所有行。

4

2 回答 2

6

只需将 NOT ( !) 移出一层。您希望“所有行都不为空”的项目不为真,而不是“所有行都不为空”为真。

DataTable filteredRows = dt.Rows.Cast<DataRow>()
    .Where(row => !row.ItemArray.All(field => field is System.DBNull))
    .CopyToDataTable();
于 2012-09-13T17:02:10.310 回答
0

您是否尝试过过滤到任何字段而不是全部?

DataTable filteredRows = dt.Rows.Cast<DataRow>().Where(row => row.ItemArray.Any(field => !(field is System.DBNull))).CopyToDataTable();
于 2012-09-13T16:49:12.153 回答