2012-08-03 8 views
24

Aktualizuję ilość w koszyku, ale ona rzuca Sekwencję nie ma wyjątków elementów.Obsługa "Sekwencja nie ma elementów" Wyjątek

I nie wiem, co to oznacza. Na początku myślałem, że może to była zerowa wartość przekazywana jest gdzieś, ale to nie jest, jak już sprawdzone, że:

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();

jakieś pomysły co może być przyczyną tego?

+1

Możesz przeczytać http://stackoverflow.com/questions/1024559/when-to-use-first-and-when-to-use-firstordefault-with-linq/1024577#1024577 – driis

+0

@driss I ' Używałem FirstOrDefault(), kiedy powinno się go używać, ale gdy chciałem się nauczyć, jak zaktualizować, znalazłem bloga (tego samego, którego nauczyłem się dodawać i usuwać) - i używał First zamiast FirstOrDefault(), więc zamiast tego użyłem tego. Ale FirstOrDefault() zgłasza inny wyjątek. Nie byłem więc pewien, który z nich powinien być użyty, a nawet czy w ogóle ma to znaczenie. – Arrow

Odpowiedz

53

First() powoduje to, jeśli twój wybór zwraca 0 wierszy. Musisz albo przechwycić ten wyjątek, albo użyć wartości FirstOrDefault(), która zwróci wartość null w przypadku braku elementów.

+0

Dziękuję. To ma sens. Zastanawiam się jednak, dlaczego zwróciło _NULL_ - nawet po sprawdzeniu, czy rzeczywiście istnieje w bazie danych? Czy znasz jakieś inne sposoby aktualizacji elementu w tabeli? – Arrow

+0

Można utworzyć procedurę przechowywaną, zamapować ją w Linq i wywołać ją zamiast tego. Ale nie rozumiem, dlaczego to nie zadziała, pod warunkiem, że wszystkie parametry są w porządku. Możesz spróbować użyć Sql Profiler, aby zobaczyć, jakie polecenie SQL jest faktycznie wykonywane. To powinno pomóc w znalezieniu tego, co jest nie tak. – Varius

+2

jeśli rzeczywiście istnieje w bazie danych i nie jest zwracany, to nie spełnia warunków. używasz UserId == uid && PartNumber == pnumber && OrderId == oid są prawdziwe? czy sprawdzasz odpowiednie typy? – c0deNinja

4

Zamiast .First() go zmienić na .FirstOrDefault()

9

Jesteś metodę LINQ Pierwszy(), która as per the documentation rzuca InvalidOperationException jeśli wzywają go na pusty kolekcji użyciem.

Jeśli spodziewasz się, że wynik zapytania będzie pusty, prawdopodobnie użyjesz funkcji FirstOrDefault(), która zwróci wartość null, jeśli kolekcja jest pusta, zamiast rzucać wyjątek.

0

wartość jest null, trzeba sprawdzić, dlaczego ... (oprócz wdrożenia proponowanych tu rozwiązań)

sprawdź połączenia sprzętowe.

Powiązane problemy