从LINQ到DataTable检索值时出现NullReferenceException

时间:2014-07-16 17:01:29

标签: linq vb.net-2010 nullreferenceexception

我有一个应用程序正在将数据加载到后台任务中的数据库中。使用LINQ从数据表中检索值,操作并存储在新数据表中。我收到NullReferenceException错误,我无法弄清楚原因。我正在检查来自LINQ查询的值是否为空,如果是,则正确分配变量。但是,如果LINQ查询包含一个值,我会得到一个NullReferenceException"对象引用未设置为对象的实例"对我来说真的没有意义的错误。我做错了什么?

Dim pin = (From u In partdata.AsEnumerable() _
                Where u.Field(Of String)("PART_GRP") = sPartType And
                u.Field(Of String)("INVT_TYPE").Contains("A")
                Select oid = u.Field(Of String)("ID"), Position = u.Field(Of Integer?))


Dim pout = (From u In partdata.AsEnumerable() _
                Where u.Field(Of String)("PART_GRP") = sPartType And
                u.Field(Of String)("INVT_TYPE").Contains("B") Or u.Field(Of String)("INVT_TYPE").Contains("C")
                Select oid = u.Field(Of String)("ID"), Position = u.Field(Of Integer?))

If pin.Count > 0 And pout.Count > 0 Then

    For i = 0 To pout.Count - 1
        ioidID = pout(i).oid

        ' Parts In
        If pin(i).Position Is Nothing Then ' When "Position" is Null, it works and "" is assigned. When "position" is not null, I get a NullReferenceException error on this line.
            spinPosition = ""
        Else
            spinPosition = pin(i).Position
        End If
        ...

1 个答案:

答案 0 :(得分:0)

根据对该问题的评论,pin(i)似乎是Nothing。当您尝试在此处取消引用时,这会导致异常:

pin(i).Position

请注意,您将pinpout定义为两个独立的集合,彼此无关。您检查它们是否至少包含一个值:

If pin.Count > 0 And pout.Count > 0 Then

但是你永远不会检查它们是否包含相同的数量的值。你在这里假设:

For i = 0 To pout.Count - 1

如果pout的值超过pin,则代码将失败。