Entity Framework 4.0 Entity SQL, передавая нулевые параметры ObjectParameter - PullRequest
6 голосов
/ 27 января 2011

У меня есть запрос 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' равна нулю, я получаюSystem.ArgumentNullException.Поэтому я также попытался использовать DBNull.Value, если имя было пустым, и я получил следующее исключение:

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

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

Ответы [ 2 ]

12 голосов
/ 27 января 2011

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

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

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

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

Davide

1 голос
/ 02 февраля 2012

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

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