42 votes

Variable DAO Room Order By ASC ou DESC

J'essaie de faire un @Query dans mon @Dao qui possède un paramètre booléen, isAsc pour déterminer l'ordre :

@Query("SELECT * FROM Persons ORDER BY first_name (:isAsc ? ASC : DESC)")
List<Person> getPersonsAlphabetically(boolean isAsc);

Apparemment, ce n'est pas autorisé. Existe-t-il un moyen de contourner ce problème ?

EDIT :

Il semblait étrange d'utiliser deux requêtes (ci-dessous) puisque la seule différence est la suivante ASC y 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();

67voto

Chandan Sharma Points 137

Utilisez CASE Expression para SQLite pour y parvenir en Salle 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);

15voto

just Points 583

Créez deux requêtes, une avec ASC et une avec 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();

-8voto

Miguel Isla Points 670

Pourquoi n'essayez-vous pas quelque chose comme ça ? Je ne l'ai pas testé.

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

Et la logique que vous avez suggérée devrait être appliquée avant que vous fassiez la requête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X