List(Of Object)上的VB.NET LINQ查询

时间:2014-03-10 18:42:46

标签: vb.net linq

我遇到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和代码的记录。

1 个答案:

答案 0 :(得分:4)

您需要首先检查它是Nothing并使用AndAlso关键字来阻止它评估后一个语句。 AndAlso正在短路。有关这意味着什么的更多信息,请参阅this link

此外,在检查对象是否为空时,您应该使用IsIsNot运算符而不是=。来自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()