Linq检查一组数据行中是否有空值?
我有一组DataRows,我想检查这些行中的任何字段中是否有空值。我在下面提出了这个,但我不确定,因为我正在嵌套一个ALLLinq检查一组数据行中是否有空值?,linq,null,Linq,Null,我有一组DataRows,我想检查这些行中的任何字段中是否有空值。我在下面提出了这个,但我不确定,因为我正在嵌套一个ALL result.AsEnumerable().AsQueryable().All(o => o.ItemArray.All(i=>i == DBNull.Value)) 很难说,因为我不能在lambdas中放置“watch”。不确定这是否是正确答案。我也是Linq的新手,但我相信你可以做这样的事情 result.AsEnumerable().AsQueryabl
result.AsEnumerable().AsQueryable().All(o => o.ItemArray.All(i=>i == DBNull.Value))
很难说,因为我不能在lambdas中放置“watch”。不确定这是否是正确答案。我也是Linq的新手,但我相信你可以做这样的事情
result.AsEnumerable().AsQueryable().SingleOrDefault(o => o.ItemArray.All(i=>i == DBNull.Value))
这将返回项目列表,如果没有,则返回null。不确定是否也可以嵌套它,但不明白为什么不可能不确定这是否是正确答案。我也是Linq的新手,但我相信你可以做这样的事情
result.AsEnumerable().AsQueryable().SingleOrDefault(o => o.ItemArray.All(i=>i == DBNull.Value))
这将返回项目列表,如果没有,则返回null。不确定是否也可以嵌套它,但不明白为什么不可能实际上,您需要使用
Any
(在代码中,如果所有值都为null,您将返回true),并且AsQueryable()
在这种情况下是无用的
bool nullFound = result.AsEnumerable()
.Any(o => o.ItemArray.Any(i=>i == DBNull.Value || i == null));
然后,如果需要某个值为null的所有行的列表,只需执行以下操作:
var rowsWithNulls = result.AsEnumerable()
.Where(o => o.ItemArray.Any(i=>i == DBNull.Value || i == null))
.ToList();
附言
为了更安全,我还添加了一个
null
检查,但是如果您确定只有DBNull.Value
,您可以将其删除。实际上您需要使用任何
(在您的代码中,如果所有值都为null,您将返回true),并且AsQueryable()
在这种情况下是无用的
bool nullFound = result.AsEnumerable()
.Any(o => o.ItemArray.Any(i=>i == DBNull.Value || i == null));
然后,如果需要某个值为null的所有行的列表,只需执行以下操作:
var rowsWithNulls = result.AsEnumerable()
.Where(o => o.ItemArray.Any(i=>i == DBNull.Value || i == null))
.ToList();
附言
为了更安全,我还添加了一个
null
检查,但是如果您确定只有DBNull.Value
,则可以删除它。您不能在lambdas中放置“watch”,但可以在lambda表达式中放置断点,以便在计算表达式时查看o或I的值。可能会派上用场。您不能在lambdas中放置“watch”,但可以在lambda表达式中放置断点,以便在计算表达式时查看o或i的值。可能会派上用场。我想你的意思是“AsQueryable是无用的”,而不是可计算的。我想你的意思是“AsQueryable是无用的”,而不是可计算的。实际上,这个代码是错误的。如果代码中有一行且只有一行的所有值都为null,则将返回该行,否则将返回null。这不是答案。好吧,我明白了。无论如何,谢谢你的评论!实际上,这个代码是错误的。如果代码中有一行且只有一行的所有值都为null,则将返回该行,否则将返回null。这不是答案。好吧,我明白了。无论如何,谢谢你的评论!