2014-07-22 47 views
0

我有如下的濾波器:空對象在Func鍵

filter = project => project.Plan.ProgressStatus == progressStatus; 

我創建基於progressStatus傳遞到方法的過濾器。

然後我通過這個過濾器到where運營商。

var projects = _projectService.Where(filter); 

我回來NRE因爲Plan爲空。

如何安全地查詢其Plan.ProgressStatus等於我作爲參數傳入的對象?

+0

如果'Plan'爲空,那麼*它沒有'ProgressStatus' *。你基本上必須忽略所有沒有計劃的項目。 –

+0

我意識到這一點,我該如何安全地做到這一點? – DarthVader

+1

檢查是否爲空。爲什麼不這樣做? – usr

回答

3

讓你的過濾器檢查,如果它是null

filter = project => project.Plan != null && project.Plan.ProgressStatus == progressStatus; 

如果_projectService可能含有null然後添加檢查,以及:

filter = project => project != null 
       && project.Plan != null 
       && project.Plan.ProgressStatus == progressStatus; 
0

爲你的func中的project和/或project.Plan對象添加空檢查。

filter = project => 
{ 
    if(project == null || project.Plan == null) 
     return false; 
    return project.Plan.ProgressStatus == progressStatus; 
};