Querydsl:使用不同数量的when / then对构建case语句

时间:2017-11-10 15:28:52

标签: java querydsl

使用querydsl,我遇到了一个问题,我需要生成一个case语句,其中包含不同数量的when / then语句和最终的else表达式。

正如here所述,我已经能够生成具有固定数量的when / then语句的case语句,很容易就像这样 -

Expression<String> cases = customer.annualSpending
    .when(10000).then("Premier")
    .when(5000).then("Gold")
    .when(2000).then("Silver")
    .otherwise("Bronze");

这是我已经尝试过但没有成功的方法 -

Map<BooleanBuilder,SimplePath<?>> caseExpressionMap = new LinkedHashMap<>();    
CaseBuilder.Cases<?,?> caseExpression = null;
for(BooleanBuilder expression : caseExpressionMap.keySet()){
  if(caseExpression!=null)
    caseExpression = caseExpression.when(expression).then(caseExpressionMap.get(expression));
 else
    caseExpression = new CaseBuilder().when(expression).then(caseExpressionMap.get(expression));
}
cases=cases.otherwise(...)

我遇到了一些类型问题 -

  

该方法中的方法(捕获#19-of?)   CaseBuilder.Case什么时候不是   适用于参数(SimplePath)

在这里感谢一些帮助。

1 个答案:

答案 0 :(得分:0)

更改CaseBuilder的泛型完成了这项工作。这段代码可以使用 -

-p3