我有一个搜索应用程序,其中许多条件组合成'和'或'列表。
根据用户输入,其中一些可以为null,如果它们为null,则不应考虑这些值。
示例:
public static PagedList<Profile> exampleForSO(String param1, String params2, Integer number, Double d, Boolean condition1, Boolean condition2) {
return find.where().ieq("param1", param1).
ieq("param2", params2).
eq("number", number).
// based on the fact if condition1 is null include an eq("condition", condition1); block
// based on the fact if condition2 is null include an eq("condition", condition1); block
// if param1.equals("test") create an expression .eq("param1", param1).
findPagedList();
}
我可以使用一些if else块来解决这个问题并根据该条件返回结果,但是有超过12个不同的条件,因此如果它们为null则只有排除它们的可靠方法才会很棒。
我也可以创建许多不同的方法,但必须有一些更聪明的方法。
此外,条件不必为null,但可能有一些特定的值使它们在查询中过时,例如:
params1.equals("something");
不要包含它,因为“某些东西”无论如何都不会改变搜索结果。
有什么建议吗?
答案 0 :(得分:1)
您可以使用 find.where()返回的 ExpressionList&lt;&gt; 对象,并动态添加条件。
e.g:
ExpressionList<Profile> expressionList = find.where();
expressionList.ieq("param1", param1);
expressionList.eq("param2", param2);
if(condition1){
expressionList.eq("...", ...);
}
if(condition2){
expressionList.ieq("...", ...);
}
祝你好运