【问题标题】:Build a dynamic string to filter a rest call构建动态字符串以过滤休息呼叫
【发布时间】:2021-11-05 13:35:10
【问题描述】:

我正在尝试构建一个动态字符串,但我遇到了问题,所以我向社区寻求帮助。

A 有一个字符串来构建一个休息呼叫过滤器,但我迷失了 and's

此查询仅在仅提供一个过滤条件时有效,但我必须提供为AND

var query;
var queryDefault = "IsLastForLevelAndParticipant eq 1";
this.state.participantFirstName
? query += "substringof('" +  this.state.participantFirstName + "',Participant/FirstName)" 
: queryDefault
this.state.participantLastName
? query += "substringof('" +  this.state.participantLastName + "',Participant/LastName)" 
: queryDefault

让我们看看。

如果我开始构建它并且只提供一个过滤器,我将有一个加号and

var query;
var queryDefault = "IsLastForLevelAndParticipant eq 1";
this.state.participantFirstName
? query += "substringof('" +  this.state.participantFirstName + "',Participant/FirstName) and " 
: queryDefault
this.state.participantLastName
? query += "substringof('" +  this.state.participantLastName + "',Participant/LastName)" 
: queryDefault

query += " and " + queryDefault

我有 12 个过滤器,我必须知道有多少有值才能提供 and 子句

这是我的state

//Filters Certificates
startEmission: string;
endEmission: string;
startValidity: string;
endValidity: string;
participantFirstName: string;
participantLastName: string;
paticipantCertNumber: string;
selectYesNo: string;
selectLevel: string;

任何帮助都是奖励。

【问题讨论】:

    标签: reactjs string typescript rest dynamic-programming


    【解决方案1】:

    将所有可能的过滤器添加到数组中,过滤falsy 值,最后用" and " 连接所有项目。

    var query = [
      queryDefault,
      this.state.participantFirstName && "substringof('" + this.state.participantFirstName + "',Participant/FirstName)"
      this.state.participantLastName && "substringof('" + this.state.participantLastName + "',Participant/LastName)"
    ]
    .filter(item => !!item)
    .join(" and ");
    
    

    顺便说一句。你在使用 OData 吗?过滤器的结构看起来很熟悉。如果你这样做,我建议你使用这个库:https://github.com/techniq/odata-query#readme

    【讨论】:

    • 多谢建议,确实是个不错的选择,框架我也去看看?
    【解决方案2】:

    由于我也在使用datetime,所以这是最终解决方案

    var queryDefault = "IsLastForLevelAndParticipant eq 1";
    var query = [
      queryDefault,
      this.state.startEmission && "(Date1 ge datetime'" + moment.utc(this.state.startEmission).toISOString() + "') and (Date1 le datetime'" 
        + moment.utc(this.state.endEmission).toISOString() + "')",
      this.state.startValidity && "(Validto ge datetime'" + moment.utc(this.state.startValidity).toISOString() + "') and (Validto le datetime'" 
        + moment.utc(this.state.endValidity).toISOString() + "')",
      this.state.participantFirstName && "(substringof('" + this.state.participantFirstName + "',Participant/FirstName))",
      this.state.participantLastName && "(substringof('" + this.state.participantLastName + "',Participant/LastName))",
      this.state.selectYesNo && "IsPrinted eq " + this.state.selectYesNo,
      this.state.selectLevel && "Level/Title eq '" + this.state.selectLevel + "'"
    ]
    
    .filter(filter => !! filter)
    .join(" and ");
    
    var q = JSON.stringify(query).substring(1).slice(0, -1);
    console.log(JSON.stringify(query));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      相关资源
      最近更新 更多