VB.NET LINQ 查询列表(对象)

Moo*_*joo 2 linq vb.net

我在使用 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()
Run Code Online (Sandbox Code Playgroud)

错误'System.NullReferenceException' 类型的异常发生在 CI.dll 中,但未在用户代码中处理

附加信息:未将对象引用设置为对象的实例。

问题是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()  
Run Code Online (Sandbox Code Playgroud)

它正在崩溃。

我只需要能够返回具有匹配 ID_NUM 和代码的记录。

Ste*_*art 5

您需要检查它是否是Nothing第一个并使用AndAlso关键字来阻止它评估后一个语句。 AndAlso是短路。有关意味着什么的更多信息,请参阅此链接

此外,在检查对象是否为空时,您应该使用IsorIsNot运算符而不是=。来自这篇 MSDN 文章

检查引用(或可为空值类型)变量是否为空时,不要使用 = Nothing 或 <> 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()
Run Code Online (Sandbox Code Playgroud)