Pregunta

Tengo una consulta de entidad SQL:

SELECT VALUE t FROM MyEntities AS t 
WHERE t.Name = @p OR (@p IS NULL AND t.Name IS NULL)

Puedo ejecutar la consulta de la siguiente manera:

var results = context.CreateQuery<WorkflowInstance>(
    query, new ObjectParameter("p", name)).ToList();

Sin embargo, si la variable de 'nombre' es nula, entonces obtengo el sistema.argumentnullexception. Así que también intenté usar dbnull.value si el nombre era nulo, y obtengo la siguiente excepción:

System.argumentOutoFrangeException fue atrapado
Mensaje = El tipo de parámetro especificado 'System.dbnull' no es válido. Solo se admiten los tipos escalares, como System.int32, System.Decimal, System.Datetime y System.Guid.

Me gustaría tener consultas parametrizadas donde los valores nulos también son posibles valores de parámetros. ¿Cómo logro esto con Entity SQL?

¿Fue útil?

Solución

Tienes razón, parece ser un error en el constructor ObjectParameter. Pero la propiedad de valor parece aceptar valores nulos. Intente reemplazar su código con:

var prm = new ObjectParameter("p", typeof(string));
prm.Value = name;

var results = context.CreateQuery<WorkflowInstance>(
    query, prm).ToList();

Si asigna el parámetro de valor directamente, el código parece funcionar.

Davide

Otros consejos

Buen post Davide, utilicé esta solución para pasar un valor entero;

var prm = new ObjectParameter("pName", typeof(int));
prm.Value = pmId;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top