在查询中使用多个过滤器
Using multiple Filters in Query
有没有办法根据查询表达式的条件向查询添加多个过滤器。
例如,类似的内容。
AddressFluentHelper queryHelper=service.getAllAddress;
if(zipCode!=null){
queryHelper.filter(Address.ZIPCODE.eq(zipCode))
}
if(street!=null){
queryHelper.filter(Address.STREET.eq(street))
}
如果允许这是不同过滤器之间的默认条件 'AND'?
如果默认是'AND'我们如何实现'OR'
的用例
默认行为是所有给定 FilterExpression
之间的 'AND' 连接。
为了使这一点更明确并允许 'OR' 连接,您可以考虑构建 FilterExpression
"externally",例如像这样:
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);
}
有没有办法根据查询表达式的条件向查询添加多个过滤器。
例如,类似的内容。
AddressFluentHelper queryHelper=service.getAllAddress;
if(zipCode!=null){
queryHelper.filter(Address.ZIPCODE.eq(zipCode))
}
if(street!=null){
queryHelper.filter(Address.STREET.eq(street))
}
如果允许这是不同过滤器之间的默认条件 'AND'? 如果默认是'AND'我们如何实现'OR'
的用例默认行为是所有给定 FilterExpression
之间的 'AND' 连接。
为了使这一点更明确并允许 'OR' 连接,您可以考虑构建 FilterExpression
"externally",例如像这样:
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);
}