2016-08-08 83 views
0

我很困惑。我有兩個相同的語句,一個正常工作,另一個收到錯誤 - 值不能爲空。 r參數名稱來源。從我讀到我收到錯誤,因爲linq表達式中的某些內容爲空。然而從我所能告訴的是什麼都是空的。值不能爲空,r參數名稱來源

第一條if語句有效。當一個人從Burn Project列表中選擇'Select'時,BurnPiles列表將顯示BurnPiles列表。 (這工作)。然後,當一個人從BurnPiles列表中選擇'Select'時,會在其下面顯示RequestedBurns列表。這給了我空錯誤。有一段時間它現在沒有工作。

我不知道出了什麼問題。我知道RequestedBurn Table從第2條記錄開始,但不應該與它有任何關係。我一直在使用的BurnPile記錄已關聯RequestedBurns。

 //when 'Select' is chosen from the list of burn projects the list of burn piles 
     //associated with that specific burn project is display below it. 
     if (burnerID != null) 
     { 
      ViewBag.BurnerID = burnerID.Value; 
      viewModel.BurnPiles = viewModel.BurnProjects.Where(
       b => b.BurnerID == burnerID.Value).Single().BurnPiles; 
     } 

     //when 'Select' is chosen from the list of burn piles the list of requested 
     //burns associated with that specific burn pile is displayed below it. 
     if (burnPileID != null) 
     { 
      ViewBag.BurnPilesID = burnPileID.Value; 
      viewModel.RequestedBurns = viewModel.BurnPiles.Where(
       x => x.BurnPilesID == burnPileID).Single().RequestedBurns; 

     } 

回答

1
viewModel.BurnPiles = viewModel.BurnProjects.Where(
      b => b.BurnerID == burnerID.Value).Single().BurnPiles; 

可以設置viewModel.BurnPiles爲null。

viewModel.BurnPiles.Where(
      x => x.BurnPilesID == burnPileID).Single() 

當您嘗試並獲得RequestedBurns然後它拋出一個異常返回莫不如是。

+0

查看 '選擇' 傳遞burnPileID到第二if語句*​​ @ Html.ActionLink( 「選擇」, 「索引」,新的{burnPileID = item.BurnPilesID}) * –

+0

它通過一個空值* viewModel.RequestedBurns = viewModel.BurnPile .... *所以在'選擇'我通過burnPiles參數調用RequestedBurns我包含參數burnID,以確保第一個viewModel.BurnPiles在1st If語句有一個值可以傳遞給下一個。 - 謝謝你的回答 –

1

如果您查看文檔WhereSingle,您會看到source是代表您的集合的參數的名稱。因此,看起來您正在嘗試調用null參考的方法,如果viewModel.BurnProjects = nullviewModel.BurnPiles = null就是這種情況。

+0

有沒有辦法補救這個? –

+0

在調用Where或Single方法前檢查它們是否爲空 – oldbam

1

SingleOrDefault也有一個overload您可以在其中簡化表達式。您也可以將它與空條件運算符(如果至少使用C#6)結合使用。

if (burnerID != null) 
{ 
    ViewBag.BurnerID = burnerID.Value; 
    viewModel.BurnPiles = viewModel.BurnProjects.SingleOrDefault(b => b.BurnerID == burnerID.Value)?.BurnPiles; 
} 
在索引
+0

當我嘗試此操作時,我在'。'上收到*無效表達式*。和*語法錯誤預期的'。'*在BurnPiles –

+0

您使用的是C#6嗎? (VS2015?) –

+0

但是,我在哪裏看起來很愚蠢?從視覺工作室關於它的列表Visual C#2013 –

相關問題