如何构建一个GreenDao查询来加载通过id列表指定的所有项目?

时间:2013-01-07 11:53:05

标签: android greendao

我有一个字符串列表每个字符串是通过GreenDao持久保存的项目的唯一标识符。

如何构建一个允许我从数据库加载所有这些项目的查询?

是否有可能使用QueryBuilder执行此操作,还是需要返回编写SQL?

2 个答案:

答案 0 :(得分:7)

可以使用Property类中的in条件。

此示例使用fieldValues中包含的字段值加载所有框。 fieldValues属于List<String>

类型
  List<LocalBox> boxes = getBoxDao(context).queryBuilder()
        .where(LocalBoxDao.Properties.field.in(fieldValues)).list();

答案 1 :(得分:2)

我想在“查询”中加入一些亮点,
这有一个限制,我们不能在查询中传递超过100个ID
所以我做到的是:

List<Product> productList = new ArrayList<Product>();
DaoSession daoSessionUni = TarneaAndroidApplicationContext.getInstance().getDaoSession();

for (int i = 0; i < rowIds.size(); i = i + 100) 
{
    ProductDao productDao = daoSessionUni.getProductDao();
    QueryBuilder<Product> queryBuilder = productDao.queryBuilder().where(
        ProductDao.Properties.Id.in(rowIds.subList(i + 100 < rowIds.size() ? 
                                                   i + 100 : 
                                                   rowIds.size())),
        ProductDao.Properties.IsDeleted.eq(0));             
    productList.addAll(queryBuilder.list());
}

如果我们想在Query中传递一个id列表,我们可以使用这个方法。