我遇到LINQ查询问题 -
Dim otherRecords As List(Of Objects) = listOf.Where(Function(x) x.ID_NUM = newID _
And (x.Codes.Contains(ddlPrimaryCode.SelectedItem.Text.Trim) And Not x.Codes = Nothing)).ToList()
错误 CI.dll中出现“System.NullReferenceException”类型的异常,但未在用户代码中处理
附加信息:未将对象引用设置为对象的实例。
问题是 listOf 包含x.Codes.Contains的值“Nothing”。
在我之前
Dim otherRecords As List(Of Objects) = listOf.Where(Function(x) x.ID_NUM = newID _
And (x.Codes.Contains(ddlPrimaryCode.SelectedItem.Text.Trim)).ToList()
它正在流淌。
我需要能够只返回匹配ID_NUM和代码的记录。
答案 0 :(得分:4)
您需要首先检查它是Nothing
并使用AndAlso
关键字来阻止它评估后一个语句。 AndAlso
正在短路。有关这意味着什么的更多信息,请参阅this link。
此外,在检查对象是否为空时,您应该使用Is
或IsNot
运算符而不是=
。来自this MSDN article:
当检查引用(或可空值类型)变量是否为null时,不要使用= Nothing或<>没有。总是使用Is Nothing或IsNot Nothing。
这应该有效
Dim otherRecords As List(Of Objects) = listOf.Where(Function(x) _
(x.ID_NUM = newID) AndAlso _
(x.Codes IsNot Nothing) AndAlso _
(x.Codes.Contains(ddlPrimaryCode.SelectedItem.Text.Trim()))).ToList()