6

我有一个实体SQL查询:实体框架4.0实体SQL传递null ObjectParameter参数

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

但是,如果 '名' 变量是:

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

如下,我可以执行查询null,那么我得到System.ArgumentNullException。所以,我也尝试过使用DBNull.Value如果名称是空的,我得到以下异常:

System.ArgumentOutOfRangeException被抓获
消息=指定 参数类型“System.DBNull”没有 有效。只支持标量类型,例如 System.Int32,System.Decimal, System.DateTime和System.Guid,它们是 。

我想参数化查询其中null值也是可能的参数值。我如何用Entity SQL实现这一点?

回答

10

你是对的,似乎是ObjectParameter构造函数中的一个bug。 但Value属性似乎接受空值。 尝试用替换代码:

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

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

如果赋值参数直接的代码似乎工作。

Davide

1

不错的帖子大卫,我用这个修复传递一个整数值;

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