Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间DAO按ASC或DESC变量排序_Android_Android Room_Dao - Fatal编程技术网

Android 房间DAO按ASC或DESC变量排序

Android 房间DAO按ASC或DESC变量排序,android,android-room,dao,Android,Android Room,Dao,我试图在我的@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 l

我试图在我的
@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();
@Query(“按姓氏ASC从人员订单中选择*)
列出GetPersonSortByAsclatName();
@查询(“按姓氏描述从人员订单中选择*)
列出GetPersonSortByDesclastName();

你为什么不试试这样的东西呢?我还没有测试过

@Query("SELECT * FROM Persons ORDER BY first_name :order")
List<Person> getPersonsAlphabetically(String order);
@Query(“按姓名从人员订单中选择*)\u订单)
按字母顺序列出GetPerson(字符串顺序);

您建议的逻辑应该在您进行查询之前进行。

使用
CASE Expression
forSQLite房间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);
@Query(“按订单从人员中选择*”
案例:isAsc=1,然后第一个名称结束ASC,
案例:isAsc=0,然后是“第一个名称结束描述”)
按字母顺序列出GetPerson(布尔isAsc);

这对我来说似乎很奇怪,创建了两个查询,其中唯一的区别是ASC和DESCyes,而不是您所寻找的解决方案。不起作用。给出错误:(“,”)、ASC、BEVER、COLLATE、DESC、IN、LIMIT、逗号或分号,应为GET):order.Plus..由于“ACS”和“DECS”,这很容易出错。你知道吗?你确定你写得很好吗?而且,与你的示例中的任何其他必须手动编写ASC或DESC的代码相比,这不会更容易出错……它写得很好,并且出现了相同的错误。IDE很容易解释sql查询,并希望保留sql字按顺序排列,而不是按变量字符串排列。如果没有完全消除容易出错的代码我想你所要求的是做不到的。很抱歉听到这个消息。布尔值可能会减少或消除容易出错的代码,我同意;但是你的示例和我的示例的工作原理完全相同,因为你必须从布尔值转换为字符串。这就是我在前面的评论中的意思。仅供参考sqlite查询选项mizer不会对此进行适当优化。它将始终生成一个临时的B-树。对于android提供的较旧版本的SQLite,尤其如此。
@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);