san*_*vys 2 mysql select android greendao
如何使用绿色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 + "%")));
Run Code Online (Sandbox Code Playgroud)
我构建的这种查询不起作用?有关如何管理检查相关字段属性的查询的任何建议吗?
MainDao拥有InfoDao的关键
我想我想做这样的事情:
SELECT *
FROM Main
INNER JOIN Info
ON Main.InfoID=Info.InfoID;
WHERE Info.SomeField LIKE "%string%"
Run Code Online (Sandbox Code Playgroud)
我不知道这是否是最好的解决方案,但由于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());
}
}
Run Code Online (Sandbox Code Playgroud)
[更新]
如果您没有从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();
Run Code Online (Sandbox Code Playgroud)