【发布时间】:2019-07-08 18:28:37
【问题描述】:
我在 Realm 中有几个实例:FeedItem 的字段为 movie,类型为 Movie。 Movie 包含字段 showTimes,即 List 的 ShowTime 对象。
-FeedItem:
└ movie: Movie
└ showTimes: List<ShowTime>
└ minPrice: Float
而且我需要查询所有包含Movie 的FeedItem 项目,其中至少包含一个Showtime 并具有minPrice 字段的给定值。
我可以使用这样的东西:
Realm.getDefaultInstance().where(FeedItem::class.java)
.beginGroup()
.equalTo(FeedItem::movie.name + "." + Movie::showTimes.name + "." + ShowTime::minPrice.name, 10f)
.endGroup()
.findAll()
但showTimes 是List,我需要检查所有项目。
由于项目的现有架构,我无法查询所有项目FeedItem 然后过滤它们。所以我不能使用像这样的简单解决方案:
val feed = Realm.getDefaultInstance().where(FeedItem::class.java).findAll()
val filteredFeed = feed.filter { feedItem ->
var b = false
feedItem.movie.showTimes.forEach { showtime ->
b = showtime.minPrice == 10f
}
b
}
解决我的问题的唯一方法是向 Realm 编写一个复杂的查询。请告诉我,我该怎么做?
【问题讨论】:
-
为什么不能查询所有项目?
-
因为查询耗时过长。我无法在此处使用
findAllAsync()和回调,因为这段代码已经代表Observable,解决我的任务的最简单方法是使用复杂查询(如果可能的话)。
标签: android database realm realm-list