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