我有一个应用程序正在将数据加载到后台任务中的数据库中。使用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
...
答案 0 :(得分:0)
根据对该问题的评论,pin(i)
似乎是Nothing
。当您尝试在此处取消引用时,这会导致异常:
pin(i).Position
请注意,您将pin
和pout
定义为两个独立的集合,彼此无关。您检查它们是否至少包含一个值:
If pin.Count > 0 And pout.Count > 0 Then
但是你永远不会检查它们是否包含相同的数量的值。你在这里假设:
For i = 0 To pout.Count - 1
如果pout
的值超过pin
,则代码将失败。