Entity Framework 4.0 Entidad SQL Pasando parámetros de Partparameter NULL
-
25-10-2019 - |
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?
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;