我有一个实体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实现此目的?
答案 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;