首页 > 解决方案 > 用于 cosmos 查询的不区分大小写的 ORDER BY

问题描述

这个问题与Can I use Order By and ToLower to perform a case-insensitive string sort on DocumentDB? 但自从 5 年前有人问过这个问题后,我想我会再次提出这个问题。

对于我的情况,我有通过 EFCore 创建的模型,并且排序是动态应用的。如果没有比上面建议的答案更好的解决方案,我很高兴在普通字段旁边有一个小写字段站点,只要该字段可以设置为 EF 插入/更新操作的一部分而无需添加新字段和值转换器模型对象。

有人知道更好的方法吗?

标签: entity-framework-coreazure-cosmosdb

解决方案


没有用于不区分大小写的排序的内置机制 - 正如其他答案所暗示的那样,您需要存储标准化的内容内容版本(全部大写或全部小写,用于排序目的)。

但是:为了在查询中进行匹配,Cosmos DB 现在具有不区分大小写的字符串函数,例如StringEquals(). 因此,您现在可以执行以下操作:

SELECT c.id
FROM c
WHERE StringEquals(c.SomeProperty, "someValue", true)

第三个参数(布尔值)设置为true,提供不区分大小写的比较。

您可能需要做一些基准测试来比较区分大小写的查询的性能,以便您决定这是否适合您。

还有StartsWith(), EndsWith(), 和Contains()支持不区分大小写的匹配。


推荐阅读