如何在Realm中的多个列上执行等于比较

时间:2015-09-14 22:15:08

标签: android realm

我正在尝试创建一种在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();

    }

1 个答案:

答案 0 :(得分:2)

没有这样的方法。您可以尝试添加private boolean excluded之类的字段,并在排除邮件的位置将其设置为true。然后查询所有这样的

return realm.where(MessageItem.class)                
            .equalTo(MessageItem.COLUMN_THREAD_ID, threadId);
            .equalTo(MessageItem.COLUMN_EXCLUDED, false);
            .findAll();