VB.NET 具有各种键的 LINQ WHERE 查询集合抛出 KeyNotFoundException

VB.NET LINQ WHERE query collection with various keys throws KeyNotFoundException

我想 select 使用 LINQ WHERE 函数和 lambda 从集合中提取第一个元素,但是有些元素没有主题键(只有一个元素有它) - 所以我收到 KeyNotFoundException 错误...;-/ see collection structure

有什么办法可以解决吗?

views.First(Function(x) x("DefaultView").ToString = "TRUE")
...抛出 'System.Collections.Generic.KeyNotFoundException'

类型的异常

谢谢。 #JK

你应该可以做到

views.FirstOrDefault(Function(x As Dictionary(Of String, Object))
                         Return x.ContainsKey("DefaultView") AndAlso x("DefaultView").ToString() = "TRUE"
                     End Function)

ContainsKey 确保 Key 存在于字典中。
AndAlso 如果 ContainsKey returns true
只会检查第二个条件 x("DefaultView") 将不再出错,因为我们知道它存在

为了避免在字典中重复查找。

views.FirstOrDefault(Function(x) 
                        Dim value
                        Return x.TryGetValue("DefaultView", value) AndAlso value.ToString() = "TRUE"
                    End Function)