我正在尝试创建一种在Realm中查询表的方法,其中包含排除某些行(通过其ID)的选项。由于Realm不支持与其findAllSorted(String[], boolean[])
方法类似的多个相等参数,因此我将在循环中执行它。
有没有更好的方法来完成这项工作?
public static RealmResults<MessageItem> getAll(long threadId, Collection<Long> excludedMessageIds) {
final Realm realm = Realm.getDefaultInstance();
RealmQuery<MessageItem> allMessagesQuery = realm.where(MessageItem.class);
// Apply conditions
// 1. Thread to look into
if (threadId != -1)
allMessagesQuery = allMessagesQuery.equalTo(MessageItem.COLUMN_THREAD_ID, threadId);
// 2. Message IDs to exclude
for (final Long excludedMessageId : excludedMessageIds) {
allMessagesQuery = allMessagesQuery.notEqualTo(
MessageItem.COLUMN_MESSAGE_ID,
excludedMessageId
);
}
return allMessagesQuery.findAll();
}
答案 0 :(得分:2)
没有这样的方法。您可以尝试添加private boolean excluded
之类的字段,并在排除邮件的位置将其设置为true。然后查询所有这样的
return realm.where(MessageItem.class)
.equalTo(MessageItem.COLUMN_THREAD_ID, threadId);
.equalTo(MessageItem.COLUMN_EXCLUDED, false);
.findAll();