我有一个包含一组article
对象的领域数据库。这些文章对象中的每一个都包含ValidityTimeFrame
对象的列表,其中包含两个日期对象。顾名思义,这些状态表示该商品在哪个时间间隔内有效。
class Article(
var validDates : List<ValidityTimeFrame>
)
class ValidityTimeFrame(
var validFrom: Date = Date(),
var validUntil: Date = Date()
)
我现在要从数据库中查询所有文章,其中validDates
之一表明该项目有效,例如今天的日期在validFrom
和validUntil
之间。
答案 0 :(得分:2)
您希望以下内容能起作用,但是它将查询以下内容:
获取文章,其中有效日期至少包含一个提供日期大于或等于validFrom的日期,并且至少包含一个提供日期小于validTo的日期
因此,此无效(例如,日期为[09.11-09.13],然后是[09.17-09.19],如果您当前使用的是09.15,则实际上仍会返回该项目)< / p>
val date = Calendar.getInstance().getTime()
val articles = realm.where<Article>()
.beginGroup()
.greaterThanOrEqualTo("validDates.validFrom", date)
.lessThan("validDates.validTo", date)
.endGroup()
.findAll()
但是,即使没有子查询支持,您也可以通过链接对象反转查询来解决此问题:
class Article(
var validDates : RealmList<ValidityTimeFrame>
)
class ValidityTimeFrame(
var validFrom: Date = Date(),
var validUntil: Date = Date()
@LinkingObjects("validDates")
val articles: RealmResults<Article>? = null
)
因为现在您可以做
val articles = realm.where<ValidityTimeFrame>()
.greaterThanOrEqualTo("validFrom", date)
.lessThan("validTo", date)
.findAll()
.flatMap { it.articles!! }
.distinct() // assumes `equals` by primary key of Article
尽管您仍然需要确保在整个表中的RealmResults<Article>
发生变化时对此进行评估,以确保保持同步。
不过,请确认我没有误导您。