构建REST调用动态过滤字符串时多条件AND拼接问题求助
解决方案
核心思路是先把所有生效的过滤条件存入数组,最后统一用and拼接,从根源避免多余的连接符问题,适配任意数量的过滤条件:
// 初始化条件数组,先放入默认必选条件 const conditions = ["IsLastForLevelAndParticipant eq 1"]; // 逐个判断过滤字段是否有值,有值就生成对应过滤表达式加入数组 if (this.state.participantFirstName) { // 替换单引号避免用户输入特殊字符导致语法错误 const val = this.state.participantFirstName.replace(/'/g, "''"); conditions.push(`substringof('${val}', Participant/FirstName)`); } if (this.state.participantLastName) { const val = this.state.participantLastName.replace(/'/g, "''"); conditions.push(`substringof('${val}', Participant/LastName)`); } if (this.state.paticipantCertNumber) { const val = this.state.paticipantCertNumber.replace(/'/g, "''"); conditions.push(`CertNumber eq '${val}'`); } if (this.state.startEmission) { conditions.push(`EmissionDate ge '${this.state.startEmission}'`); } if (this.state.endEmission) { conditions.push(`EmissionDate le '${this.state.endEmission}'`); } // 剩下的startValidity、endValidity、selectYesNo、selectLevel等字段按照同样规则补充即可 // 最后用and拼接所有条件,自动处理连接符 const query = conditions.join(' and ');
注意事项
- 日期、数字、枚举类型的字段按照你对接的REST接口要求调整表达式写法即可,整体逻辑不变
- 后续新增过滤条件时,只需新增对应判断+push逻辑即可,维护成本很低
内容的提问来源于stack exchange,提问作者Joao Livio
相关产品推荐
相关产品推荐

