我正在尝试使用C# Cosmos SDK v3.11.0执行不区分大小写的搜索。通过阅读CosmosDB blog post,SQL API现在支持这一点--但我无法使用SDK使其工作。The release notes for 3.10.0建议支持此功能,但我找不到任何关于如何使用它的文档。
我尝试了以下代码,但它不执行不区分大小写的搜索:
query.Where(d => d.Name.Contains(name, StringComparison.InvariantCultureIgnoreCase));
使用以下代码会导致引发异常:
query.Where(d => d.Name.StartsWith(name, StringComparison.InvariantCultureIgnoreCase))
Microsoft.Azure.Cosmos.Linq.DocumentQueryException: Method 'StartsWith' is not supported., Windows/10.0.18363 cosmos-netstandard-sdk/3.11.2
at Microsoft.Azure.Cosmos.Linq.BuiltinFunctionVisitor.Visit(MethodCallExpression methodCallExpression, TranslationContext context)
at Microsoft.Azure.Cosmos.Linq.StringBuiltinFunctions.Visit(MethodCallExpression methodCallExpression, TranslationContext context)
at Microsoft.Azure.Cosmos.Linq.BuiltinFunctionVisitor.VisitBuiltinFunctionCall(MethodCallExpression methodCallExpression, TranslationContext context)
at Microsoft.Azure.Cosmos.Linq.ExpressionToSql.VisitNonSubqueryScalarExpression(Expression inputExpression, TranslationContext context)
at Microsoft.Azure.Cosmos.Linq.ExpressionToSql.VisitNonSubqueryScalarExpression(Expression expression, ReadOnlyCollection`1 parameters, TranslationContext context)
at Microsoft.Azure.Cosmos.Linq.ExpressionToSql.VisitScalarExpression(Expression expression, ReadOnlyCollection`1 parameters, TranslationContext context)
at Microsoft.Azure.Cosmos.Linq.ExpressionToSql.VisitScalarExpression(LambdaExpression lambda, TranslationContext context)
at Microsoft.Azure.Cosmos.Linq.ExpressionToSql.VisitWhere(ReadOnlyCollection`1 arguments, TranslationContext context)
5条答案
按热度按时间inb24sb21#
对您编写的语法的支持目前在works中。一个pull request刚刚启动了a couple of hours ago。
在此之前,下面的查询可以在当前的SDK版本(3.11)上运行,但它们也应该可以在旧版本上运行。应将其视为不区分大小写的解决方法。RU成本高于本地不区分大小写搜索。我做了一个快速测试,
ToLower().StartsWith(...)
的成本几乎是SQL等价物成本的两倍。zf9nrax12#
StringEquals
在SDK中尚不支持(尚未)。我发现Cosmos DB团队中有人发来的消息证实了这一点(并指出沟通可能会更好)。我还发现它在模拟器中也不支持。
rmbxnbpk3#
SDK 3.12.0中明确支持不区分大小写:
将成功运行,并返回结果,其中Description以“Do Something”或“do something”开头。
flvtvl504#
这不是正确的语法。请参阅文档here
3duebb1j5#
Equals也很好用(至少在3.31.2版中):