6

Tengo una consulta de Entity SQL:Entity Framework 4.0 Entity SQL pasando ObjectParameter nula parámetros

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 'name' es nulo, entonces obtengo System.ArgumentNullException. Así que también trató de utilizar DBNull.Value si el nombre era nula, y tengo la siguiente excepción:

System.ArgumentOutOfRangeException fue capturado
Mensaje = La especificada tipo de parámetro 'System.DBNull' no es válido. Solo los tipos escalares, como System.Int32, System.Decimal, System.DateTime y System.Guid, son compatibles con .

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

Respuesta

10

Tiene razón, parece ser un error en el constructor ObjectParameter. Pero la propiedad Value parece aceptar valores nulos. tratar de sustituir el 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

1

Nice post Davide, utilicé esta revisión para pasar un valor entero;

var prm = new ObjectParameter("pName", typeof(int)); 
prm.Value = pmId; 
Cuestiones relacionadas