我尝试在DocumentDB中创建一个用户定义的函数,以便在where子句中使用它,但执行查询会抛出Microsoft.Azure.Documents.Linq.DocumentQueryException
,并显示以下消息:
不支持“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();
答案 0 :(得分:2)
我能够在恰好使用'Microsoft.Azure.DocumentDB 1.5.0'
当我使用intParameter1
替换Invoke
来电中Convert.ToString(intParameter1)
的引用时,错误消失了。
(我不知道为什么我自己刚刚开始使用这项技术)
然后,我尝试将这些软件包更新为Nuget 'Microsoft.Azure.DocumentDB.1.9.2'
中的最新软件包,并恢复为仅使用intParameter1
,现在也可以正常运行。
所以也许是一个已修复过的bug。特别是Release Notes 1.9.1个州
修复了使用用户时使用不同类型参数的能力 在LINQ中定义了函数。
答案 1 :(得分:0)
是的,此漏洞在此处报告后在.NET SDK 1.9.2中得到修复。
谢谢!