sqlite 如何在Room中忽略WHERE子句的一部分?

eoigrqb6  于 2023-02-09  发布在  SQLite
关注(0)|答案(1)|浏览(182)

我希望用户能够构建具有多个条件的自定义筛选器。但是,用户可能不希望按所有条件进行搜索。例如,用户希望仅按帐户筛选事务并忽略类别。在这种情况下,如何忽略给定WHERE子句的类别部分?

@Query("SELECT * FROM Transactions WHERE account_id IN (:account_ids) AND category_id IN (:category_ids) ")
fun getTransactions(account_ids: List<Long>?, category_ids: List<Long>?): Flow<List<Transaction>>

这个查询只是一个例子,在真实的的查询中有更多的条件。传递NULL到函数会崩溃应用,传递空列表会返回空列表。

1dkrff03

1dkrff031#

您可以添加空检查,在以下情况下忽略帐户或类别列表:

SELECT *
FROM Transactions
WHERE (account_id IN :account_ids OR :account_ids IS NULL) AND
      (category_id IN :category_ids OR :category_ids IS NULL)

相关问题