Entity Framework 4.0 Entity SQL, передавая нулевые параметры ObjectParameter

У меня есть запрос Entity SQL:

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

Я могу выполнить запрос следующим образом:

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

Однако, если переменная name имеет значение null, я получаю исключение System.ArgumentNullException. Поэтому я также попытался использовать DBNull.Value, если имя было пустым, и я получил следующее исключение:

System.ArgumentOutOfRangeException был пойман
Сообщение = указанный тип параметра 'System.DBNull' недопустим. Поддерживаются только скалярные типы, такие как System.Int32, System.Decimal, System.DateTime и System.Guid.

Я хотел бы иметь параметризованные запросы, где нулевые значения также являются возможными значениями параметров. Как мне добиться этого с помощью Entity SQL?

2 ответа

Решение

Вы правы, похоже, ошибка в конструкторе ObjectParameter. Но свойство Value, кажется, принимает нулевые значения. Попробуйте заменить ваш код на:

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

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

Если вы присваиваете параметр Value напрямую, кажется, что код работает.

Davide

Хороший пост Davide, я использовал это исправление для передачи целочисленного значения;

var prm = new ObjectParameter("pName", typeof(int));
prm.Value = pmId;
Другие вопросы по тегам