"La cadena de entrada no tenía el formato correcto" al usar LINQ

Estoy tratando de hacer un FirstOrDefault() consulta en un conjunto de objetos y se lanza una extraña excepción:

Mi código:

private RecordObject GetRecordByID(int recID)
{
    return _objectSet.FirstOrDefault(rec => rec.ID == recID);
}

Mensaje de excepción:

Cadena de entrada no tiene el formato correcto

InnerException es nulo.

Seguimiento de pila:

at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer&         number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.Convert.ToDecimal(String value, IFormatProvider provider)
at System.String.System.IConvertible.ToDecimal(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at Oracle.DataAccess.Client.OracleDataReader.ChangeType(Object sourceValue, Type targetType)
at Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i)
at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal)
at System.Data.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet)
at lambda_method(Closure , Shaper )
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Linq.SystemCore_EnumerableDebugView`1.get_Items()

Lo extraño es que no estoy haciendo ningún tipo de conversión.

PS: La base de datos es Oracle 10g, pero como estoy usando EF, supongo que esto no importa, pero en caso de que necesite este detalle.

preguntado el 03 de mayo de 12 a las 12:05

¿Simplemente haciendo FirstOrDefault() devuelve un valor? -

¿Puede escribir qué formato en la tabla db es su identificación? -

Hoy tuve exactamente el mismo error y el problema fue que inserté datos como enteros y en el campo de la base de datos era char. -

2 Respuestas

Ok, ya solucioné esto y me quedo con esta pregunta por si alguien tiene el mismo problema.

Para resolverlo, necesitaba volver a importar mis tablas desde la base de datos, aparentemente había algunas columnas incompatibles entre mis objetos ADO.Net y la base de datos.

Creo que EF estaba tratando de hacer una operación Cast para compensar mi error (dejando versiones no compatibles), y el cast no es posible, y aquí es donde vino la conversión de tipos.

Gracias a todos.

contestado el 04 de mayo de 12 a las 09:05

Compruebe si no está comparando int con la columna nula en la base de datos (ID).

PD: el recId pasado no es nulo, pero los valores con los que se compara pueden ser nulos en la tabla de la base de datos

contestado el 03 de mayo de 12 a las 12:05

recID es de tipo int en el método, también sería un error de tiempo de compilación - Habib

No, no hay errores de tiempo de compilación, ya que proporcioné un seguimiento de la pila, esto significa que es un error de tiempo de ejecución. - Ken D

Lo que quise decir es que para verificar si la columna de entidad asignada (Id en este caso) no está definida como una columna nula (la columna permite valores nulos en la base de datos) - Pravin Pawar

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.