Tudor Luca
Tudor Luca

Reputation: 6419

Query Realm for objects by IDs provided in a collection

I have a List<String> ids and I want all the FooRealmObjects that have the ID field included in the ids list.

I could iterate through the ids list and query objects by ID, but I was hoping there is a one-liner for this, like :

realm.where(Foo.class).in("id", ids).findAll();

Any ideas?

Upvotes: 4

Views: 5447

Answers (3)

Dan  Meng
Dan Meng

Reputation: 214

Now realm already support the feature you want.

Added in Realm Java 1.2.0. (https://github.com/realm/realm-java/issues/841)

Now you can do exactly what you want:

realm.where(Foo.class).in("id", ids).findAll();

Upvotes: 5

Tudor Luca
Tudor Luca

Reputation: 6419

As Jeremy mentioned, querying with a list of parameters is not possible (for now), but his answer does not work at all.

This is the workaround I used:

    List<String> ids = ...;

    Realm realm = Realm.getInstance(mContext);
    RealmQuery<Foo> query = realm.where(Foo.class);

    for (int i = 0; i < ids.size() - 1; i++) {
        query = query.equalTo("id", ids.get(i)).or();
    }
    query = query.equalTo("id", ids.get(ids.size() - 1));

    RealmResults<Foo> foos = query.findAll();

Upvotes: 2

Jeremy Lyman
Jeremy Lyman

Reputation: 3234

I don't believe there is a method according to the documentation to query like this. You could do something like the following:

RealmQuery query = realm.where(Foo.class);
for (String id : ids) {
    query.equalTo("id", id).or();
}
query.findAll();

Might have to iterate through it using ;;; to remove the last .or() but I'm not sure.

Upvotes: 0

Related Questions