Room DAO 按 ASC 或 DESC 变量排序
Room DAO Order By ASC or DESC variable
我正在尝试在我的 @Dao
接口中创建一个 @Query
函数,它有一个布尔参数,isAsc
以确定顺序:
@Query("SELECT * FROM Persons ORDER BY first_name (:isAsc ? ASC : DESC)")
List<Person> getPersonsAlphabetically(boolean isAsc);
显然这是不允许的。这附近有工作吗?
编辑:
使用两个查询(如下)似乎很奇怪,因为唯一的区别是 ASC
和 DESC
:
@Query("SELECT * FROM Persons ORDER BY last_name ASC")
List<Person> getPersonsSortByAscLastName();
@Query("SELECT * FROM Persons ORDER BY last_name DESC")
List<Person> getPersonsSortByDescLastName();
创建两个查询,一个使用 ASC,一个使用 DESC。
@Query("SELECT * FROM Persons ORDER BY last_name ASC")
List<Person> getPersonsSortByAscLastName();
@Query("SELECT * FROM Persons ORDER BY last_name DESC")
List<Person> getPersonsSortByDescLastName();
你为什么不尝试这样的事情呢?我没有测试过。
@Query("SELECT * FROM Persons ORDER BY first_name :order")
List<Person> getPersonsAlphabetically(String order);
您建议的逻辑应该在您进行查询之前执行。
使用 CASE Expression
for SQLite 在 Room DAO,
中实现
@Query("SELECT * FROM Persons ORDER BY
CASE WHEN :isAsc = 1 THEN first_name END ASC,
CASE WHEN :isAsc = 0 THEN first_name END DESC")
List<Person> getPersonsAlphabetically(boolean isAsc);
我正在尝试在我的 @Dao
接口中创建一个 @Query
函数,它有一个布尔参数,isAsc
以确定顺序:
@Query("SELECT * FROM Persons ORDER BY first_name (:isAsc ? ASC : DESC)")
List<Person> getPersonsAlphabetically(boolean isAsc);
显然这是不允许的。这附近有工作吗?
编辑:
使用两个查询(如下)似乎很奇怪,因为唯一的区别是 ASC
和 DESC
:
@Query("SELECT * FROM Persons ORDER BY last_name ASC")
List<Person> getPersonsSortByAscLastName();
@Query("SELECT * FROM Persons ORDER BY last_name DESC")
List<Person> getPersonsSortByDescLastName();
创建两个查询,一个使用 ASC,一个使用 DESC。
@Query("SELECT * FROM Persons ORDER BY last_name ASC")
List<Person> getPersonsSortByAscLastName();
@Query("SELECT * FROM Persons ORDER BY last_name DESC")
List<Person> getPersonsSortByDescLastName();
你为什么不尝试这样的事情呢?我没有测试过。
@Query("SELECT * FROM Persons ORDER BY first_name :order")
List<Person> getPersonsAlphabetically(String order);
您建议的逻辑应该在您进行查询之前执行。
使用 CASE Expression
for SQLite 在 Room DAO,
@Query("SELECT * FROM Persons ORDER BY
CASE WHEN :isAsc = 1 THEN first_name END ASC,
CASE WHEN :isAsc = 0 THEN first_name END DESC")
List<Person> getPersonsAlphabetically(boolean isAsc);