查询Microsoft Dynamics Web Api时如何对Dynamics内字段去空格后匹配?
解决方案
可以直接在查询语句的$filter条件中使用Dynamics 365 Web API支持的OData replace函数,先把存储的mobilephone字段内的所有空格替换为空,再和你预处理后的无空格手机号做等值匹配,即可命中所有格式的同号记录。
修改后的查询代码如下:
var mobile = "07900123456"; // 保持原有对用户输入去除所有空格的预处理逻辑即可 var queryString = "contacts?" + "$select=contactid&" + $"$filter=replace(mobilephone, ' ', '') eq '{mobile}'"; var contact = await GetAsync(queryString);
注意事项
- 如果你的业务场景中手机号还可能包含横杠
-、括号()等其他格式化字符,可以叠加replace函数处理,示例:replace(replace(mobilephone, ' ', ''), '-', '') eq '{mobile}'即可同时移除空格和横杠 - 该语法适用于所有主流在线版本、V9.0及以上本地部署版本的Dynamics 365
- 数据量较大的场景下,字段上的函数运算会消耗一定查询性能,长期使用建议新增业务规则:在联系人创建、更新手机号时自动移除所有特殊字符写入专用的标准手机号字段,后续直接查询该字段即可获得更好的查询性能
- 生产环境使用建议优先做参数化查询处理,避免字符串拼接导致的注入风险
内容的提问来源于stack exchange,提问作者penguin178
相关产品推荐
相关产品推荐

