@Query
関数@Dao
ブールパラメータを持つインターフェースisAsc
は順序を決定します。
@Query("SELECT * FROM Persons ORDER BY first_name (:isAsc ? ASC : DESC)")
List<Person> getPersonsAlphabetically(boolean isAsc);
どうやらこれは許可されていません。この辺りに回避策はありますか?
編集:
唯一の違いはASC
とDESC
であるため、2つのクエリ(下記)を使用するのは奇妙に思われました。
@Query("SELECT * FROM Persons ORDER BY last_name ASC")
List<Person> getPersonsSortByAscLastName();
@Query("SELECT * FROM Persons ORDER BY last_name DESC")
List<Person> getPersonsSortByDescLastName();
使用する 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);
2つのクエリを作成します。1つはASCを使用し、もう1つは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();