2015-04-20 104 views
0

我有以下代碼(或類似的東西):LEFT OUTER JOIN空引用錯誤LINQ

Public Sub Load() 
    Dim equipServices = {New Pair(20, 6), New Pair(21, 10), New Pair(22, 1)} 
    Dim serviceTypes = {New Pair(1, 2), New Pair(6, 3), New Pair(9, 3)} 
    Dim serviceIntervals = {New Pair(1, 0), New Pair(2, 0), New Pair(3, 0)} 
    Dim equipmentList = _ 
     (From Service In equipServices _ 
     Group Join Type In serviceTypes On Service.second Equals Type.first Into Types = Group 
     From Type In Types.DefaultIfEmpty() 
     Group Join Interval In serviceIntervals On Type.second Equals Interval.first Into Intervals = Group 
     From Interval In Intervals.DefaultIfEmpty()).ToList() 
End Sub 

Private Class Pair 
    Public first As Integer 
    Public second As Integer 

    Public Sub New(first As Integer, second As Integer) 
     Me.first = first 
     Me.second = second 
    End Sub 
End Class 

本質上講,我試圖做一個左外連接的服務類型,然後左類型間隔的外部連接。當嘗試使用Interval加入Type時,會在Type.second上引發System.NullReferenceException。我認爲這是由於在第二個服務對(21,10)上沒有匹配的類型。我怎樣才能安排查詢,而不是這個錯誤,我只是得到一個值爲Nothing for Interval?

回答

0

事實證明,您可以在連接過程中檢查「Nothing」。我換成這一行:

Group Join Interval In serviceIntervals On Type.second Equals Interval.first Into Intervals = Group 

這一行:

Group Join Interval In serviceIntervals On If(IsNothing(Type), Nothing, Type.second) Equals Interval.first Into Intervals = Group 

,並制定了罰款。

+2

您可能希望將此標記爲答案 – Alex