如何在 where 子句中将 UserDefinedFunctionProvider.Invoke 与 udfs 一起使用

How to use UserDefinedFunctionProvider.Invoke with udfs in a where clause

我尝试在 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();

我能够在碰巧使用 'Microsoft.Azure.DocumentDB 1.5.0'

的示例项目上重现这个

当我将 Invoke 调用中对 intParameter1 的引用替换为 Convert.ToString(intParameter1) 时,错误消失了。

(不知道为什么我自己才刚开始接触这个技术)

然后我尝试将包更新到 Nuget 'Microsoft.Azure.DocumentDB.1.9.2' 提供的最新版本,然后恢复到仅使用 intParameter1,现在也可以正常工作。

所以可能是一个错误,此后已修复。特别是 发行说明 1.9.1

Fixed the ability to use parameters of different types when using user defined functions in LINQ.

是的,此错误已在此处报告后在 .NET SDK 1.9.2 中修复。

谢谢!