将变量设置为linq查询而没有结果

时间:2017-03-24 22:54:59

标签: vb.net linq

我有一张表格,其中包含指向特定影院网站的链接。我想检索给定影院的第一个链接。我的代码设置变量:

Dim link As String = TheaterLinks.Where(Function(x) x.TheaterID = TheaterID).FirstOrDefault().Link

如果没有结果(有些剧院没有任何链接),那么我得到:

Object reference not set to an instance of an object.

我该怎么做?我试过了:

Dim link As String = Links.Where(Function(x) x.TheaterID = TheaterID.DefaultIfEmpty().First().Link

但是我无法弄清楚要放在DefaultIfEmpty()中的内容。我尝试了DefaultIfEmpty("")和DefaultIfEmpty(blankstringvariable),但后来我得到了:

Value of type 'String' cannot be converted to type 'TheaterLink'.

2 个答案:

答案 0 :(得分:3)

问题是允许FirstOrDefault()返回null,在这种情况下,访问Link属性会引发异常。

如果您使用VB.NET 14,请为自动空值检查添加问号:

Dim link As String = TheaterLinks.Where(Function(x) x.TheaterID = TheaterID).FirstOrDefault()?.Link

(请参阅?.Link而不是.Link

否则,分两个阶段进行:首先,使用FirstOrDefault获取对象,然后使用If语句手动进行空值检查。

答案 1 :(得分:0)

对于我的原始示例,我只需要添加一个问号:

Dim link As String = Links.Where(Function(x) x.ID = id).FirstOrDefault()?.Link

我尝试在我的模型中执行此操作并得到一个" Nullable对象必须具有值"错误,所以我做了两阶段的方法:

Dim eventDate = Events.Where(Function(x) x.ID = id).FirstOrDefault()?.EventDate
If eventDate.HasValue Then
     'some code
Else
     'some code
End If