8

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

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

有没有可能用 QueryBuilder 来做,还是我需要回去写 SQL?

4

2 回答 2

7

这在 Property 类中的in条件下是可能的。

此示例加载所有具有包含在 中的字段值的框fieldValuesfieldValues是类型List<String>

  List<LocalBox> boxes = getBoxDao(context).queryBuilder()
        .where(LocalBoxDao.Properties.field.in(fieldValues)).list();
于 2013-01-09T09:29:17.343 回答
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 列表,我们可以使用这个方法。

于 2013-04-01T07:22:02.040 回答