2012-08-03 32 views
24

Estoy actualizando una cantidad en mi carrito de compras, pero arroja una excepción de Secuencia no tiene elementos.Manejo 'La secuencia no tiene elementos' Excepción

Y no sé lo que eso significa. Al principio pensé que tal vez había un valor nulo se pasa en algún lugar, pero ese no es el caso, como he comprobado que:

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

Alguna idea de lo que podría estar causando esto?

+1

Es posible que desee leer http://stackoverflow.com/questions/1024559/when-to-use-first-and-when-to-use-firstordefault-with-linq/1024577#1024577 – driis

+0

@driss I ' he estado usando FirstOrDefault() cuando debería usarse, pero cuando quise aprender a actualizar, encontré un blog (el mismo que aprendí a agregar y eliminar), y usó First en lugar de FirstOrDefault(), así que usé eso en su lugar. Pero FirstOrDefault() arroja otra excepción. Así que no estaba seguro de cuál debería usarse, o si incluso importaba, en este caso. – Arrow

Respuesta

53

First() está causando esto si su selección devuelve 0 filas. O tiene que atrapar esa excepción o usar FirstOrDefault() que devolverá nulo en caso de no tener elementos.

+0

Gracias. Eso tiene sentido. Sin embargo, me pregunto por qué devolvería _NULL_ incluso después de comprobar que realmente existe en la base de datos. ¿Conoces otras formas de actualizar el elemento en una tabla? – Arrow

+0

Puede crear el Procedimiento almacenado, asignarlo en Linq y llamarlo en su lugar. Pero no veo por qué esto no funcionaría, siempre que todos los parámetros estén bien. Podría intentar utilizar Sql Profiler para ver qué comando SQL se ejecuta realmente. Eso debería ayudar a encontrar lo que está mal. – Varius

+2

si realmente existe en la base de datos y no se devuelve, entonces no cumple con las condiciones. ¿Usas UserId == uid && PartNumber == pnumber && OrderId == oid son todos verdaderos? ¿Estás buscando los tipos correctos? – c0deNinja

4

En lugar de .First() cambio a .FirstOrDefault()

9

está usando el método de primero() de LINQ, que as per the documentation lanza un InvalidOperationException si está llamando en una colección vacía.

Si espera que el resultado de su consulta esté vacío a veces, es probable que desee utilizar FirstOrDefault(), que devolverá nulo si la colección está vacía, en lugar de arrojar una excepción.

0

El valor es nulo, usted tiene que comprobar qué ... (además de la implementación de las soluciones propuestas aquí)

comprobar las conexiones de hardware.

Cuestiones relacionadas