6

我有一个实体 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();

但是,如果“名称”变量为空,那么我会得到 System.ArgumentNullException。因此,如果名称为空,我也尝试使用 DBNull.Value,我得到以下异常:

System.ArgumentOutOfRangeException 被捕获
Message=指定的参数类型“System.DBNull”无效。仅支持标量类型,例如 System.Int32、System.Decimal、System.DateTime 和 System.Guid。

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

4

2 回答 2

12

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

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

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

如果您直接分配 Value 参数,则代码似乎可以工作。

戴维德

于 2011-01-27T11:09:05.523 回答
1

不错的帖子 Davide,我使用此修复程序传递一个整数值;

var prm = new ObjectParameter("pName", typeof(int));
prm.Value = pmId;
于 2012-02-02T16:03:47.737 回答