如何使用linq从DataTable中过滤掉空行?

时间:2010-03-07 16:24:49

标签: linq datatable

我有一个从excel数据构建的Datable,但有时excel会返回所有字段都为空的行。

我想在不考虑列名的情况下过滤掉这些内容。

我认为Linq可以很好地完成这项任务,但在实现这一点时会遇到一些麻烦。

到目前为止,这是我得到的:

 var nonemptyrows = from r in table.AsEnumerable()
                                              from f in r.ItemArray
                                                  where f != null
                                                     select r;

但它并不完全存在。任何人都能看到我所缺少的东西,或者我是否走错了路线?

提前致谢!

3 个答案:

答案 0 :(得分:4)

像这样:

table.AsEnumerable()
     .Where(r => r.ItemArray.Any(v => v != null && v != DBNull.Value))

或者,使用查询理解语法:

from r in table.AsEnumerable()
where r.ItemArray.Any(v => v != null && v != DBNull.Value)

答案 1 :(得分:3)

使用表格列清洁一点:

var nonemptyrows = from row in table.AsEnumerable()
                   where table.Columns.Any(col => !row.IsNull(col))
                   select row;

答案 2 :(得分:1)

感谢您的回复!我发布之后,下面这个想法打动了我,它对我有用:

var nonemptyrows = from r in table.Rows.Cast<DataRow>() where r.ItemArray.All(c => c != DBNull.Value) select r;