Комнатный DAO Заказ по переменным ASC или DESC - PullRequest
3 голосов
/ 22 марта 2019

Я пытаюсь создать функцию @Query в моем интерфейсе @Dao, который имеет логический параметр, 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();

Ответы [ 3 ]

2 голосов
/ 22 марта 2019

Используйте CASE Expression для SQLite , чтобы достичь этого в Комнате 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);
1 голос
/ 22 марта 2019

Почему бы тебе не попробовать что-нибудь подобное?Я не проверял это.

@Query("SELECT * FROM Persons ORDER BY first_name :order")
List<Person> getPersonsAlphabetically(String order);

И логика, которую вы предложили, должна пройти до того, как вы сделаете запрос.

1 голос
/ 22 марта 2019

Создайте два запроса, один с 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();
...