' System.ArgumentNullException'使用Linq和DataSet在System.Data.DataSetExtensions.dll中发生

时间:2014-05-14 08:11:54

标签: c# boolean linq-to-dataset

bool? isSiteExists = null;
            isSiteExists = true;
            isSiteExists = false;
            isSiteExists = dtData.AsEnumerable().Any(Rowx => Value1 == Rowx.Field<string>("ColValue1"));

也试过这个

        bool? isSiteExists = dtData.AsEnumerable().Any(Rowx => Value1 == Rowx.Field<string>("ColValue1"));

也无法正常工作

运行时错误

  

类型&#39; System.ArgumentNullException&#39;的异常发生在System.Data.DataSetExtensions.dll中,但未在用户代码中处理

附加信息:值不能为空。

据我所知,&#34;?&#34;是支持空值。

什么是正确的语法...

提前致谢

3 个答案:

答案 0 :(得分:1)

如果你得到ArgumentNullException,可能是因为dtData出了问题。

答案 1 :(得分:0)

看起来问题与bool无关?类型。

我认为问题在于dtData.AsEnumerable()或者可能在你的lambda中Rowx =&gt; Value1 == Rowx.Field(&#34; ColValue1&#34;)

更多dtData.AsEnumerable()。任何(...)永远不会返回null。它看起来像

bool Any(这个IQueryable来源,Expression&gt;谓词)

如果您在出现问题时尝试获取null,则应使用异常处理。

答案 2 :(得分:0)

你得到的例外不是引用可以为空的布尔值,它被赋值的右侧抛出,因为这部分内容是:

dtData.AsEnumerable().Any(Rowx => Value1 == Rowx.Field<string>("ColValue1"));

为空。

由于异常是在System.Data.DataSetExtensions.dll中引发的,我猜测它来自AsEnumerable()方法,而dtData为空。

您可以通过在行上放置一个断点并检查调试器中dtData的值来轻松检查这一点。