数据表上的LINQ查找所有行都为空的位置

时间:2012-09-13 16:43:27

标签: c# excel oledb

我有一个从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列的行,但这不是我想要的。

我希望免除所有列为空的行。

2 个答案:

答案 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();