如何使用 UserDefinedFunctionProvider.Invoke with udfs in a where



>我尝试在 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 中修复。

谢谢!

相关内容

  • 没有找到相关文章

最新更新