我有一个从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列的行,但这不是我想要的。
我希望免除所有列为空的行。
答案 0 :(得分:6)
将NOT(!
)移出一个级别。您希望“所有行为空”的项不为真,而不是“所有行都不为空”的项为真。
DataTable filteredRows = dt.Rows.Cast<DataRow>()
.Where(row => !row.ItemArray.All(field => field is System.DBNull))
.CopyToDataTable();
答案 1 :(得分:0)
您是否尝试过滤到Any Field而不是All?
DataTable filteredRows = dt.Rows.Cast<DataRow>().Where(row => row.ItemArray.Any(field => !(field is System.DBNull))).CopyToDataTable();