6

devo una query Entity SQL:Entity Framework 4.0 Entity SQL passando ObjectParameter nullo parametri

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

posso eseguire la query come segue:

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

Tuttavia, se il 'nome' variabile è null, quindi ho ottenuto System.ArgumentNullException. Così ho anche provato ad usare DBNull.Value se il nome è stato nullo, e ottengo la seguente eccezione:

System.ArgumentOutOfRangeException è stato catturato
Messaggio = Il specificato tipo di parametro 'System.DBNull' non è valido. Solo i tipi scalari, come System.Int32, System.Decimal, System.DateTime e System.Guid, sono supportati da .

Mi piacerebbe avere query parametrizzate in cui valori nulli sono anche possibili valori di parametro. Come ottengo ciò con Entity SQL?

risposta

10

Hai ragione, sembra un bug nel costruttore ObjectParameter. Ma la proprietà Value sembra accettare valori nulli. Provare a sostituire il codice con:

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

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

Se si assegna il parametro Value direttamente il codice sembra funzionare.

Davide

1

Bel post Davide, ho usato questa correzione per passare un valore intero;

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