You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Digital Twins中执行不区分大小写的查询

Azure Digital Twins 实现不区分大小写查询的方案

问题背景

我有一段在Azure Digital Twins中执行查询的C#代码:

query = digitalTwinsClientInstance.QueryAsync<BasicDigitalTwin>(
    @$"SELECT Child, Child.$metadata.$model
       FROM DIGITALTWINS
           ...
       WHERE Area.$dtId = '{areaId}'
         AND CONTAINS(Child.Name, '{textFilter}')"
);

希望实现不区分大小写的查询,但Azure Digital Twins不支持UPPER或LOWER函数,尝试使用LOWER转换的写法无法生效:

query = digitalTwinsClientInstance.QueryAsync<BasicDigitalTwin>(
    @$"SELECT Child, Child.$metadata.$model
       FROM DIGITALTWINS
           ...
       WHERE Area.$dtId = '{areaId}'
         AND CONTAINS(LOWER(Child.Name), '{textFilter.ToLower()}')" // 无法生效
);

可行解决方案

方案1:使用REGEX_MATCH函数实现正则不区分大小写匹配

Azure Digital Twins查询语言支持REGEX_MATCH函数,通过指定忽略大小写的标志'i',可以实现不区分大小写的包含匹配:

// 转义查询文本中的正则特殊字符,避免语法错误
var escapedTextFilter = System.Text.RegularExpressions.Regex.Escape(textFilter);

query = digitalTwinsClientInstance.QueryAsync<BasicDigitalTwin>(
    @$"SELECT Child, Child.$metadata.$model
       FROM DIGITALTWINS
           ...
       WHERE Area.$dtId = '{areaId}'
         AND REGEX_MATCH(Child.Name, '{escapedTextFilter}', 'i')"
);
  • 核心逻辑:REGEX_MATCH的第三个参数'i'开启不区分大小写模式;
  • 注意事项:必须用Regex.Escape()处理输入的textFilter,如果文本包含., *, ?等正则特殊字符,不转义会导致匹配逻辑出错。

方案2:新增小写字段预存(适合可修改模型的场景)

如果允许修改数字孪生的模型定义,可以新增一个用于存储小写名称的字段(比如LowercaseName),在创建或更新孪生时同步写入小写格式的名称,之后直接基于该字段做查询:

// 创建/更新孪生时同步设置小写名称字段
var targetTwin = new BasicDigitalTwin
{
    Id = "sample-twin-id",
    Contents =
    {
        ["Name"] = "SampleTwinName",
        ["LowercaseName"] = "SampleTwinName".ToLowerInvariant()
    }
};
await digitalTwinsClientInstance.UpsertDigitalTwinAsync(targetTwin.Id, targetTwin);

// 查询时直接匹配小写字段
query = digitalTwinsClientInstance.QueryAsync<BasicDigitalTwin>(
    @$"SELECT Child, Child.$metadata.$model
       FROM DIGITALTWINS
           ...
       WHERE Area.$dtId = '{areaId}'
         AND CONTAINS(Child.LowercaseName, '{textFilter.ToLowerInvariant()}')"
);

该方案适合查询频率高、对性能要求较高的场景,避免正则匹配带来的性能开销。

内容的提问来源于stack exchange,提问作者Yan Tavares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:10:26