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;