gpt4 book ai didi

c# - Entity Framework Core Cosmos Db - 如何比较字符串,不区分大小写?

转载 作者:行者123 更新时间:2023-12-03 23:44:08 28 4
gpt4 key购买 nike

我尝试了几个变体:

entity.FirstOrDefaultAsync(x => string.Equals(x.Id, Id, StringComparison.OrdinalIgnoreCase));
entity.FirstOrDefaultAsync(x => x.Id.Equals(Id, StringComparison.OrdinalIgnoreCase));
也试过 ToUpper()方法:
var IdUpper = Id.ToUpper();
entity.FirstOrDefaultAsync(x => x.Id.ToUpper() == idUpper);
但所有解决方案都抛出错误:

System.InvalidOperationException: The LINQ expression could not be translated


是否有支持 Cosmos Db 的 EF Core 的解决方案?

最佳答案

Case-insensitive StringEquals was added to CosmosDB just this June .您应该将 EF Core Cosmos 提供程序更新为 the latest version . 2020 年 6 月之前发布的版本将不具备此功能。
我找不到任何发行说明或 GitHub 问题指定哪个版本首先引入了大小写不变比较,所以我不能说哪个版本引入了这个功能。包依赖性显示 v 5.0 RC1 是第一个显式依赖具有该功能的 CosmosDB SDK。
如果出现问题,最好使用 Cosmos .NET SDK直接地。
至于为什么这是一个问题,字符串比较是在服务器上根据字段的排序规则执行的。排序规则指定要使用的排序顺序以及哪些字符被视为相等。 AA例如,在丹麦语中被认为是在 Z 之后的单个字母。数据库索引是使用该排序规则构建的,因此尝试使用不同的排序规则搜索值将无法使用任何现有索引。服务器被迫扫描所有数据并计算相等性和排序。使用类似 ToLower() 的函数一样贵。

关于c# - Entity Framework Core Cosmos Db - 如何比较字符串,不区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64025490/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com