2012-12-18 50 views
2

因此,使用下拉列表選擇用戶名稱,然後單擊「查看」,它將顯示此用戶先前預訂的所有假期。序列不包含MVC3 Web App中的元素

從這裏用戶可以點擊'創建新',這將使他們創建一個新的頁面。 而不是必須從另一個下拉列表中重新選擇他們的名字,我通過當前用戶標識並用用戶標識代替第二個下拉列表。

一切工作正常,用2個單獨的下拉菜單,用戶可以預訂假期等... 但現在(在我改變第二個下拉以保存ID值)我從我的listHoliday方法我的控制器:

錯誤:InvalidOperationException未被用戶代碼處理。序列不包含任何元素。

var dbPerson1 = (from p in db.People 
          where p.Id == PersonId 
          select p).Single(); 

誰能勸怎麼辦?

+0

這意味着你的'從...... select'沒有返回任何元素,即你有任何人與PersonId'的''一個Id'。 –

+2

'序列不包含任何元素'表示Linq查詢沒有返回結果。輸出PersonId並查看它的值(我猜空值) – roryok

+0

此外,您可能會發現LINQs lambda語法更具可讀性,例如, 'db.People.Single(p => p.Id == PersonId)'。 –

回答

3

這意味着您正在執行的linq查詢不會返回任何結果,而是.Single()會引發異常。

嘗試

var dbPerson1 = (from p in db.People 
         where p.Id == PersonId 
         select p).FirstOrDefault(); // or use SingleOrDefault() if People are unique 

if (dbPerson1==null) 
{ 
    throw new HolidayAllocationException("Person not found"); 
} 
else 
{ 
    // person found 
    if (dbPerson.HolidaysRemaining > 0) 
    { 
     AllocateHoliday(); // or whatever you need to do 
    } 
    else 
    { 
     throw new NoHolidayLeftException(); 
    } 
} 

dbPerson1那麼將是無效的,如果查詢不返回任何東西。

希望幫助

+1

如果您希望單個項目最多返回,您也可以使用'SingleOrDefault'。如果謂詞返回多個謂詞,則會引發異常。 –

+0

@sambomartin感謝您的回覆。 PersonId返回null,所以我將其更改爲'14'用戶的id,它工作正常,更改單ro singleOrdeFault和現在下一行是thorwing一個錯誤,說dpPerson1爲空.... if(dbPerson1。假期剩餘> 0) - – John

+0

@DavidHoerster,感謝回覆請參閱上面的 – John

相關問題