实体框架4.0实体SQL传递null ObjectParameter参数

时间:2011-01-27 10:44:38

标签: .net entity-framework .net-4.0 entity-framework-4 entity-sql

我有一个实体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。所以如果名称为null,我也尝试使用DBNull.Value,我得到以下异常:

  

发现了System.ArgumentOutOfRangeException   消息=指定的   参数类型'System.DBNull'不是   有效。只有标量类型,如   System.Int32,System.Decimal,   System.DateTime和System.Guid是   支撑。

我想要参数化查询,其中空值也是可能的参数值。如何使用Entity SQL实现此目的?

2 个答案:

答案 0 :(得分:12)

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

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

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

如果您直接指定Value参数,则代码似乎有效。

的Davide

答案 1 :(得分:1)

很好的帖子Davide,我使用此修复程序传递整数值;

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