在查询中使用多个过滤器

阿尼班达斯

有没有一种方法可以基于查询表达式的条件向查询添加多个过滤器。

例如,类似的东西。

AddressFluentHelper queryHelper=service.getAllAddress;
if(zipCode!=null){
   queryHelper.filter(Address.ZIPCODE.eq(zipCode))
}
if(street!=null){
   queryHelper.filter(Address.STREET.eq(street))
}

如果允许,则不同过滤器之间的默认条件“与”是吗?如果默认值为“ AND”,我们如何实现“ OR”的用例

克里斯多夫·舒伯特

默认行为是所有给定之间的“与”连接FilterExpression

为了使其更加明确并允许“ OR”连接,您可以考虑构建FilterExpression“外部”,例如:

import io.vavr.collection.List;
...
List<ExpressionFluentHelper<YOUR_ENTITY>> expressions = List.empty();
if (zipCode != null) {
    expressions = expressions.append(Address.ZIPCODE.eq(zipCode););
}
if (street != null) {
    expressions = expressions.append(Address.STREET.eq(street));
}

AddressFluentHelper queryHelper = service.getAllAddress();
if (!expressions.isEmpty()) {
    // this combines all elements in the "expressions" via "or", starting from the left/the first entry 
    ExpressionFluentHelper<YOUR_ENTITY> combinedExpression = expressions.reduceLeft(ExpressionFluentHelper::or);
    queryHelper.filter(combinedExpression);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章