如何构建包含连续排序方法的查询?链式调用排序方法时因返回值为void报错
解决QueryBuilder链式调用order方法报错问题
嘿,我之前也踩过这个坑!你遇到的问题根源很明确:order()方法的返回值是void,它是直接修改当前的QueryBuilder实例,而不是返回一个新的实例,所以没法像equals()、and()那样链式调用下一个order()。
咱们调整下代码结构就能解决,把链式调用的order()拆成单独的调用步骤就行:
final qc = Entity_.objectID .equals(objectId) .and(Entity_.date .lessOrEqual(date.millisecondsSinceEpoch)); // 先创建基础的QueryBuilder实例 final QueryBuilder qBuilder = _box.query(qc); // 分别调用order方法,每个order都会对当前实例添加排序规则 qBuilder.order(DualPhaseOilWaterTankReadingData_.readingNumber); qBuilder.order(DualPhaseOilWaterTankReadingData_.readingDate); // 完成排序配置后再build查询 final builtQuery = qBuilder.build(); List<Entity> data = builtQuery.find(); builtQuery.close(); return data;
这样修改后,排序规则会按照你调用order()的顺序生效:先按readingNumber排序,当这个字段值相同时,再按readingDate排序,完全符合你的需求。
内容的提问来源于stack exchange,提问作者raphire
相关产品推荐
相关产品推荐

