android - 如果给定谓词为空,是否可以跳过过滤器?
问题描述
我目前正在尝试在我的存储库中实现一些过滤器。我问自己的问题是是否可以跳过一些过滤器,例如orderBy()
给定queryHolder.order
为空的过滤器。
目前,我只是在做一个空检查并复制其余的。但这看起来很丑陋,也不是很方便。
当前方法
suspend fun testQuery(queryHolder: QueryHolder): QuerySnapshot = if (queryHolder.order != null) {
db.collection(FIREBASE_PRODUCTS_BASE_PATH)
.limit(SHOP_DB_DOCUMENT_LIMIT)
.whereEqualTo(FIREBASE_PRODUCT_CATEGORY, queryHolder.category)
.orderBy(queryHolder.order, queryHolder.orderAscending!!) <-- Would like to skip this, if null
.get()
.await()
} else {
db.collection(FIREBASE_PRODUCTS_BASE_PATH)
.limit(SHOP_DB_DOCUMENT_LIMIT)
.whereEqualTo(FIREBASE_PRODUCT_CATEGORY, queryHolder.category)
.get()
.await()
}
这种方法的另一个问题是,它并不涵盖所有情况,例如,我希望我queryHolder.category
也可以为空,以便我获得整个云火库列表
解决方案
您可以在调用apply{ }
之前有条件地影响查询的构建:get()
db.collection(FIREBASE_PRODUCTS_BASE_PATH)
.limit(SHOP_DB_DOCUMENT_LIMIT)
.whereEqualTo(FIREBASE_PRODUCT_CATEGORY, queryHolder.category)
.apply{
if(queryHolder.order != null){
orderBy(queryHolder.order, queryHolder.orderAscending!!)
}
}.get().await()
推荐阅读
- javascript - 如何在 JavaScript 中合并两个数组并替换前一个数组的值
- ffmpeg - ffmpeg concat 两个大小不同的视频遇到“不匹配”错误
- python - 在 pandas 数据帧上迭代数学函数
- python - SyntaxError: 'return' 在注释中生成的外部函数
- python - 如何同时运行多个 eventlet 服务器?
- logging - 如何更改张量板的日志记录级别?
- algorithm - 上述算法的平均案例复杂度
- sql - 为什么这个查询需要聚合?
- c - 您可以动态编译和链接/加载 C 代码到 C 程序中吗?
- php - 如何从 PHP 中的更多 mySQL 行中获取平均值?