>我尝试在 DocumentDB 中创建一个用户定义的函数以在 where 子句中使用它,但查询的执行会抛出一个带有以下消息的Microsoft.Azure.Documents.Linq.DocumentQueryException
:
不支持类型为"系统.对象"的常量。
下面的代码演示了所描述的行为。我做错了什么吗?
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();
我能够在碰巧使用'Microsoft.Azure.DocumentDB 1.5.0'
的示例项目中重现这一点
当我用 Convert.ToString(intParameter1)
替换Invoke
调用中对 intParameter1
的引用时,错误消失了。
(我不知道为什么我自己才开始这项技术)
然后,我尝试将软件包更新到 Nuget 'Microsoft.Azure.DocumentDB.1.9.2'
提供的最新版本,并恢复为仅使用 intParameter1
并且现在也可以正常工作。
所以也许是一个已经修复的错误。特别是发行说明1.9.1 状态
修复了使用用户时使用不同类型的参数的功能 在 LINQ 中定义的函数。
,此错误在此处报告后已在 .NET SDK 1.9.2 中修复。
谢谢!