相关对象中带有 LIKE 子句的 GreenDao 查询
GreenDao query with LIKE clause in related object
如何使用green dao查询查询相关对象中有LIKE字符串的对象?
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%"
我不知道这是否是最佳解决方案,但由于 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();
如何使用green dao查询查询相关对象中有LIKE字符串的对象?
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%"
我不知道这是否是最佳解决方案,但由于 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();