2016-07-13 64 views
1

我嘗試創建DocumentDB一個用戶定義的函數在使用它在查詢的WHERE子句,但執行會拋出一個Microsoft.Azure.Documents.Linq.DocumentQueryException以下消息:如何使用UserDefinedFunctionProvider.Invoke在一個UDF的where子句

不支持'System.Object'類型的常量。

以下代碼說明了所描述的行爲。難道我做錯了什麼?

string udfName = "udfDemo"; 
UserDefinedFunction udfDemo = new UserDefinedFunction() 
{ 
    Id = udfName, 
    Body = @"function(a, b) { 
       return true; 
      }" 
}; 

UserDefinedFunction createdUdf = documentClient.UpsertUserDefinedFunctionAsync(documentCollectionUri, udfDemo).Result; 

int intParameter1 = 1; 

IQueryable<MyModel> query= documentClient 
    .CreateDocumentQuery<MyModel>(documentCollectionUri) 
    .Where(order => 
     (bool)UserDefinedFunctionProvider.Invoke(udfName, order.CancelationDetails, intParameter1)); 

var result = query.ToList(); 

回答

2

我能瑞普這對發生的樣本項目中使用'Microsoft.Azure.DocumentDB 1.5.0'

當我在電話InvokeConvert.ToString(intParameter1)取代參考intParameter1錯誤消失。

(我不知道爲什麼我剛開始在這一技術開始我自己)

我又試圖從的NuGet 'Microsoft.Azure.DocumentDB.1.9.2'更新包到最新可用並恢復到只用intParameter1,並且現在也無誤地工作。

所以也許一個已經修復的錯誤。具體地說Release Notes 1.9.1狀態

固定在LINQ使用用戶 定義函數時要使用不同類型的參數的能力。

+0

你說得對,馬丁! Rajesh說這個bug是固定的。在通過郵件聯繫Andrew Liu並指導他到這個SO帖子後,DocumentDB團隊進行了一些進一步的調查,並使用Microsoft Azure DocumentDB Client Library 1.9.2修復了這個錯誤。 –

0

是的,這個錯誤在.NET SDK 1.9.2中被報告後被修復。

謝謝!