如何使用绿色dao查询查询对象中有LIKE sting的对象?
QueryBuilder qb = mainDao.queryBuilder();
qb.where(
mainDao.Properties.Date.between(filter.getFrom().getTime(), filter.getTo().getTime()),
qb.or(mainDao.Properties.Details.like("%"+ string + "%"),
infoDao.Properties.Display_name.like("%" + string + "%"),
infoDao.Properties.Email.like("%" + string + "%"),
infoDao.Properties.Phone.like("%" + string + "%"),
infoDao.Properties.Code.like("%" + string + "%")));
我构建的这种查询不起作用?有关如何管理查询事件的相关字段属性的查询的任何建议吗?
MainDao拥有InfoDao的关键
我想我想做这样的事情:
SELECT *
FROM Main
INNER JOIN Info
ON Main.InfoID=Info.InfoID;
WHERE Info.SomeField LIKE "%string%"
答案 0 :(得分:6)
我不知道这是否是最佳解决方案,但由于greendao不支持JOIN,它可以解决问题。此外,您可以简单地对此特定情况使用SQLite查询。
这里我假设你有Main和Info之间的关系。如果你不这样做,你可以再做几步。
List<Info> infoArray = infoDao.queyBuilder()
.whereOr(infoDao.Properties.Display_name.like("%" + string + "%"),
infoDao.Properties.Email.like("%" + string + "%"),
infoDao.Properties.Phone.like("%" + string + "%"),
infoDao.Properties.Code.like("%" + string + "%"))
.list();
List<Main> mainArray = Collections.emptyList();
for (Info info : infoArray) {
if(!mainArray.contains(info.getMain()) {
mainArray.add(info.getMain());
}
}
[已更新]
如果您没有从Info到Main的关系,那么还有另一个版本:
List<Info> infoArray = infoDao.queryBuilder()
.whereOr(infoDao.Properties.Display_name.like("%" + string + "%"),
infoDao.Properties.Email.like("%" + string + "%"),
infoDao.Properties.Phone.like("%" + string + "%"),
infoDao.Properties.Code.like("%" + string + "%"))
.list();
List<Long> infoIds= Collections.emptyList();
for (Info info : infoArray) {
infoIds.add(info.getId());
}
List<Main> mainArray = mainDao.queryBuilder()
.whereOr(mainDao.Properties.id.in(infoIds),
mainDao.Properties.Details.like("%"+ string + "%"))
.list();