У меня есть таблица с именем games
, в которой есть столбец с именем platforms
, в котором содержится список сокращений платформы. Это список всех платформ, на которых вышла игра c. Вот пример одной из ячеек в platforms
:
AMI,GG,SNES,CPC,AST,C64,SPEC,MAC,PS2,NES,3DO,ARC,XBGS,PS3N,PC,IPHN,DSI,HALC,PSPN,ANDR,
Пользователь может выбрать любое количество платформ, для которых он sh будет просматривать игры. Например, они могут выбрать просмотр игр для следующих платформ:
SNES, MAC, PC
Поэтому мне нужен способ программно построить запрос Room, который бы находил игры на выбранных платформах. Мне нужно как-то сгенерировать произвольное количество предложений LIKE и вставить их в запрос. Я попробовал следующее, но он не дал результатов:
private fun fetchLikeClauses(platformIndices: MutableSet<Int>): String {
val sb = StringBuilder()
// Game.platforms LIKE '%XONE%' OR Game.platforms LIKE '%PC%'
for (platformIndex in platformIndices) {
sb.append("platforms LIKE '%${allPlatforms[platformIndex].abbreviation}%'")
sb.append(" OR ")
}
return sb.toString().removeSuffix(" OR ")
}
@Query("SELECT * FROM Game WHERE :likeClauses")
fun getGames(likeClauses: String): DataSource.Factory<Int, Game>
Вот еще одна вещь, которую я попробовал, но по какой-то причине это не сработало: Передача строки для использования в качестве части комнаты query
Я предполагаю, что RawQuery подойдет для этого? Есть ли другой способ?