2012-08-03 163 views
24

我正在更新購物車中的數量,但它拋出的序列中沒有元素的例外。處理「序列沒有元素」異常

我甚至不知道這意味着什麼。起初我想,也許有什麼地方被傳遞空值,但事實並非如此,因爲我已經檢查了:

Sequence contains no elements Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: Sequence contains no elements

Source Error:

Line 35: var uid = WebSecurity.CurrentUserId; Line 36: var newqty = Request.Form["Quantity"]; Line 37:
OModel.Cart c = (from item in database.Carts Line 38:
where item.UserId == uid && item.PartNumber == pnumber && item.OrderId == oid Line 39: select item).First();

任何想法可能是造成這個?

+1

您可能想要閱讀http://stackoverflow.com/questions/1024559/when-to-use-first-and-when-to-use-firstordefault-with-linq/1024577#1024577 – driis 2012-08-03 19:07:24

+0

@driss我'當我想要學習如何更新時,我發現了一個博客(和我學會添加和刪除的博客一樣) - 並且他使用First而不是FirstOrDefault(),而使用FirstOrDefault所以我用它來代替。但是FirstOrDefault()會拋出另一個異常。所以在這種情況下,我不確定應該使用哪一個,或者甚至是否重要。 – Arrow 2012-08-03 19:13:54

回答

53

First()如果您的選擇返回0行,則會導致此錯誤。您必須捕獲該異常,否則使用FirstOrDefault(),如果沒有元素,將返回null。

+0

謝謝。這就說得通了。我不知道,爲什麼它會返回_NULL_ - 即使我已經檢查過它確實存在於數據庫中?你知道任何其他方式來更新表中的項目嗎? – Arrow 2012-08-03 19:07:46

+0

您可以創建存儲過程,將其映射到Linq中,然後調用它。但我不明白爲什麼這不起作用,只要所有參數都可以。您可以嘗試使用Sql Profiler來查看實際執行的SQL命令。這應該有助於找出問題所在。 – Varius 2012-08-03 19:13:30

+2

如果它確實存在於數據庫中,並且它沒有被返回,那麼它不符合條件。你使用UserId == uid && PartNumber == pnumber && OrderId == oid是否都是真的?你在檢查正確的類型嗎? – c0deNinja 2012-08-03 19:14:17

4

而不是.First()其更改爲.FirstOrDefault()

9

您正在使用LINQ首款()方法,如果你在一個空的集合稱之爲這as per the documentation引發InvalidOperationException。

如果您希望您的查詢的結果是空的,有時,你可能想使用FirstOrDefault(),這將返回null,如果集合是空的,而不是拋出異常。

0

值爲null,你必須檢查爲什麼... (除了這裏提出的解決方案的實施)

檢查硬件連接。