2014-07-11 131 views
-1

編輯:解決方案最終只是空檢查。檢查解決方案的最佳答案。LINQ查詢中的空值檢查和處理

我會簡單介紹一下。

LayersTestNineGridData的列表。 TestNineGridData有一個屬性VectorSource它有屬性Paths,這也是一個列表。

Paths是一個NineGridPath對象的列表,其中每個對象都有一個HeightWidth屬性。

我需要在Layers中找到最大值NineGridPathHeightWidth

這就是我目前正在得到的,但我得到一個NullReferenceException

int maxHeightInLayers = (int)Layers.Max(x => x.VectorSource.Paths.Max(y => y.Height)); 
int maxWidthInLayers = (int)Layers.Max(x => x.VectorSource.Paths.Max(y => y.Width)); 

我懷疑問題可能是出我內心的lambda表達式,因爲它可以在Paths可以檢查一個Height屬性,但我不知道如何解決這個問題。

注意:爲了說明起見,因爲它可能在我的措辭中含糊不清,VectorSource不需要迭代。 VectorSource有屬性Paths,而不是其列表元素。

+0

你確定所有的VectorSouces和路徑都_not null_? –

+0

這是可能的!我很迷戀我的LINQ,我錯過了一個明顯的錯誤。儘管從這個應用程序工作了很長時間,但我懷疑VectorSource或Paths是否爲null。 –

回答

0

嘗試加入一些空檢測到您的查詢:

int maxHeightInLayers = (int) Layers 
      .Max(x => (x.VectorSource != null && x.VectorSource.Paths != null) 
       ? x.VectorSource.Paths.Where(p => p != null).Max(y => y.Height) 
       : 0);