6

I have an Entity SQL query:

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

I can execute the query as follows:

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

However, if the 'name' variable is null, then I get the System.ArgumentNullException. So I also tried to use DBNull.Value if the name was null, and I get the following exception:

System.ArgumentOutOfRangeException was caught
Message=The specified parameter type 'System.DBNull' is not valid. Only scalar types, such as System.Int32, System.Decimal, System.DateTime, and System.Guid, are supported.

I would like to have parameterized queries where null values are also possible parameter values. How do I achieve this with Entity SQL?

2 Answers 2

12

You are right, seems to be a bug in the ObjectParameter constructor. But the Value property seems to accept null values. Try to replace your code with:

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

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

If you assign the Value parameter directly the code seems to work.

Davide

Sign up to request clarification or add additional context in comments.

Comments

1

Nice post Davide, I used this fix to pass an integer value;

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.