是否有任何优雅的方法可以根据条件向查询中动态添加where条件?例如,默认查询为
query = collectionReference
.whereField(SaleProperties.saledate.rawValue, isGreaterThanOrEqualTo: startDate)
.whereField(SaleProperties.saledate.rawValue, isLessThanOrEqualTo: endDate)
.whereField(SaleProperties.isapprovedbystoremanager.rawValue, isEqualTo: true)
,我有4个不同的条件,例如state, division, store, user
。当选择了这些过滤器后,我需要相应地添加条件。假设我选择了state
,则查询为
query = collectionReference
.whereField(SaleProperties.state.rawValue, isEqualTo: selectedState)
.whereField(SaleProperties.saledate.rawValue, isGreaterThanOrEqualTo: startDate)
.whereField(SaleProperties.saledate.rawValue, isLessThanOrEqualTo: endDate)
.whereField(SaleProperties.isapprovedbystoremanager.rawValue, isEqualTo: true)
同样,如果我选择了state and division
query = collectionReference
.whereField(SaleProperties.state.rawValue, isEqualTo: selectedState)
.whereField(SaleProperties.division.rawValue, isEqualTo: selectedDivision)
.whereField(SaleProperties.saledate.rawValue, isGreaterThanOrEqualTo: startDate)
.whereField(SaleProperties.saledate.rawValue, isLessThanOrEqualTo: endDate)
.whereField(SaleProperties.isapprovedbystoremanager.rawValue, isEqualTo: true)
以上示例仅针对两个条件进行了说明。像这样,我需要检查4个不同的条件以及其他条件的组合,组合的可能性将像24个查询一样。因此,如果有人知道构成查询的优雅方式,那就太好了。
*********答案********
使用默认查询(请参见默认查询),我检查条件,例如,如果选择了state
,则只需向默认查询添加一个条件
if(isStateSelected == true)
{
query = query.whereField(SaleProperties.state.rawValue, isEqualTo: selectedState)
}
同样,如果选择了division
if(isDivisionSelected == true)
{
query = query.whereField(SaleProperties.division.rawValue, isEqualTo: selectedDivision)
}
因此,如果条件为true,则会将其他条件添加到默认查询中