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;