我正在尝试获得特定日期真实的会话。 这是 Dao 代码。
@Query('SELECT * FROM Session WHERE :day IS 1') // TRUE WAS NOT WORKING FOR SOME REASON
Stream<List<Session>> getSessionByDay(String day);
这就是实体
@entity
class Session {
@primaryKey
final int id;
...
final bool sunday;
...
Session(
{required this.id,
...
this.sunday = false,
...
});
}
这是电话
database.sessionDao.getSessionByDay('sunday'),
当我使用这样的东西时,它会起作用
@Query(SELECT * FROM Session WHERE sunday IS 1)
我没有遇到任何错误。
要实现基于特定日期动态选择会话,您不能直接在查询中传递列名作为参数,例如:day。这是因为列名不能像值一样在 SQL 查询中参数化。相反,您需要一种不同的方法来根据日期动态构建查询。
abstract class SessionDao {
@Query('SELECT * FROM Session WHERE sunday = :isTrue')
Stream<List<Session>> getSessionsOnSunday(bool isTrue);
@Query('SELECT * FROM Session WHERE monday = :isTrue')
Stream<List<Session>> getSessionsOnMonday(bool isTrue);
// Add similar methods for other days of the week
Stream<List<Session>> getSessionByDay(String day) {
switch (day.toLowerCase()) {
case 'sunday':
return getSessionsOnSunday(true);
case 'monday':
return getSessionsOnMonday(true);
// Add similar cases for other days of the week
default:
throw Exception('Invalid day');
}
}
}