2016-12-08 60 views
1

如何在使用Lambda查詢時避免空例外?在下面的代碼中,當InstallationDateType爲空時,我得到一個異常。我如何解決這個問題?lambda WHERE子句中的空值

foreach (AvailableDate availableDate in installationDatesResponseRootObject.Response 
       .InstallationDatesResponse 
       .AvailableDates 
       .Where(a => 
        a.InstallationDateType.ToString().ToUpper() == Constants.InstallationDateTypeDish)) 
{ 
    //Do Something 
} 
+0

你開始你的for循環 – RandomStranger

+1

可能重複之前,您可以檢查它是否具有價值[什麼是一個NullReferenceException,以及如何解決?(HTTP:// stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – HimBromBeere

回答

3

嘗試使用C#引進空,條件運算符?. 6.

在您的例子這將是

a.InstallationDateType?.ToString().ToUpper().Equals(Constants.InstallationDateTypeDish) 
2

要闡述我的意見,這裏有一個例子:

var items = installationDatesResponseRootObject.Response.InstallationDatesResponse.AvailableDates 
    .Where(a => a.InstallationDateType?.ToString().ToUpper() == Constants.InstallationDateTypeDish); 
if (items.Any()) 
    foreach (var item in items) 
    { 
      //Do something 
    } 

注意,這僅僅是一個例子。有更好的方法來檢查IEnumerable是否爲空。

+0

這仍然會導致'NullReferenceException'因爲如果'InstallationDateType'爲null,那麼'.ToString( )'會失敗。 –

+1

@ScottBamforth你是對的。通過slanto的幫助修復了我的答案。 – RandomStranger

1

的問題是,因爲你是在null參考稱爲.ToString(),所以你需要先檢查一下。

有幾種不同的檢查方式。如果您使用的是最新的C#,那麼您最好使用slanto中提到的C#6中引入的空條件運算符?.

如果您使用的是舊版本的C#,那麼您可以在Where方法中執行如下操作。

foreach (AvailableDate availableDate in installationDatesResponseRootObject.Response.InstallationDatesResponse.AvailableDates.Where(a => a.InstallationDateType != null && a.InstallationDateType.ToString().ToUpper() == Constants.InstallationDateTypeDish)) 
{ 
    //Do Something 
} 

希望有所幫助。

3

檢查installationDatesResponseRootObject,Response,InstallationDatesResponse,AvailableDates是否爲空值。 然後改變你的LINQ到這一點:

installationDatesResponseRootObject.Response.InstallationDatesResponse.AvailableDates.Where(a => a.InstallationDateType!=null && a.InstallationDateType.ToString().ToUpper() == Constants.InstallationDateTypeDish))