领域查询与列表

use*_*522 10 android realm

我正在使用领域将我的数据存储在Android上.真棒的框架!现在我唯一的问题是:

我在我的数据库中有一个带有国家ID的数组列表字符串.

现在我找回包含与国家关系的饮料.

有没有办法可以像这样进行查询:

String [] ids;

realm.where(Drinks.class).equalsTo("country.id", ids);
Run Code Online (Sandbox Code Playgroud)

那样的东西?

或者我是否真的需要进行查询以获取所有饮料,然后手动过滤列表?

编辑:

我的课程:

public class Drinks extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
    private Country country;
}

public class Country extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

Epi*_*rce 8

理论上可以使用链接查询(搜索"country.id")来实现您想要做的事情,但是链接查询很慢.此外,您需要将一堆or()谓词连接在一起,我不会冒险使用链接查询.

我建议使用以下内容

public class Drinks extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
    private Country country;
    @Index
    private String countryId;
}

public class Country extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

当你Country在课堂上设置时,你也设置了countryIdas country.getId().

一旦你这样做,你可以构建这样的:

RealmQuery<Drinks> drinkQuery = realm.where(Drinks.class);
int i = 0;
for(String id : ids) {
    if(i != 0) {
        drinkQuery = drinkQuery.or();
    }
    drinkQuery = drinkQuery.equalTo("countryId", id);
    i++;
}
return drinkQuery.findAll();
Run Code Online (Sandbox Code Playgroud)

  • Realm 1.2.0为`RealmQuery`添加了`in()`运算符 (3认同)

Sag*_*ain 6

由于Realm数据库已添加RealmQuery.in()版本1.2.0

我建议使用这样的东西。

//Drinks
public class Drinks extends RealmObject {
@PrimaryKey
private String id;
private String name;
private String countryId;

//getter and setter methods
}

//Country
public class Country extends RealmObject {
    @PrimaryKey
    private String id;
    private String name;

//getter and setter methods
}
Run Code Online (Sandbox Code Playgroud)

在内部活动/片段中使用以检索饮料清单的代码

String[] countryIdArray = new String[] {"1","2","3"} //your string array
RealmQuery<Drinks> realmQuery  = realm.where(Drinks.class)
            .in("countryId",countryIdArray);
RealmResults<Drinks> drinkList = realmQuery.findAll();
Run Code Online (Sandbox Code Playgroud)