【问题标题】:'System.ArgumentNullException' occurred in System.Data.DataSetExtensions.dll using Linq and DataSet使用 Linq 和 DataSet 在 System.Data.DataSetExtensions.dll 中发生“System.ArgumentNullException”
【发布时间】:2014-05-14 08:11:54
【问题描述】:
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"));

也不行

运行时错误

System.Data.DataSetExtensions.dll 中出现“System.ArgumentNullException”类型的异常,但未在用户代码中处理

附加信息:值不能为空。

据我所知“?”是支持空值。

什么是正确的语法...

【问题讨论】:

  • dtData的类型是什么?
  • 我敢打赌,当您只写dtData.AsEnumerable().Any(Rowx =&gt; Value1 == Rowx.Field&lt;string&gt;("ColValue1")); 而没有任何分配时,您仍然会收到错误消息。错误不是因为bool?,而是因为dtDatadtData.AsEnumerable()RowXnull
  • 是的,你是对的...我检查了 DataTable dtData 是否为空。我必须解决这个问题。感谢您的帮助。

标签: c# boolean linq-to-dataset


【解决方案1】:

如果您收到 ArgumentNullException,可能是因为收到 dtData 时出了点问题。

【讨论】:

  • 甚至dtData 也可能返回null?
  • 如果您更正了那个错字或dtData 存在的任何问题,那么您的分配应该是 100% 有效的。只需确保您的数据表不返回 null。
  • 是的,你是对的...我检查了 DataTable dtData 是否为空。我必须解决这个问题。感谢您的帮助。
【解决方案2】:

看起来问题与布尔无关?输入。

我认为问题出在 dtData.AsEnumerable() 或可能出在您的 lambda Rowx => Value1 == Rowx.Field("ColValue1")

更多的 dtData.AsEnumerable().Any(...) 将永远不会返回 null。好像

bool Any(this IQueryable source, Expression> predicate)

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

【讨论】:

    【解决方案3】:

    您得到的异常不是指可为空的布尔值,它是由赋值的右侧抛出的,因为这部分中的某些内容:

    dtData.AsEnumerable().Any(Rowx =&gt; Value1 == Rowx.Field&lt;string&gt;("ColValue1"));

    为空。

    由于 System.Data.DataSetExtensions.dll 中抛出异常,我猜测它来自 AsEnumerable() 方法,而 dtData 为空。

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

    【讨论】:

    • 是的,你是对的......我检查了 DataTable dtData 是否为空。我必须解决这个问题。感谢您的帮助。
    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多