2017-09-28 3 views
0

Ich versuche mehrere Felder gleichzeitig abzufragen, die eine Liste von String-Werten in Realm enthalten. Lassen Sie uns sagen, dass ich folgendes Objekt haben:Ist es möglich, mehrere Felder mit einer Liste von String-Werten abzufragen (Realm Java)

public class Article extends RealmObject implements Serializable{ 
    @PrimaryKey 
    @Required 
    private String aID = UUID.randomUUID().toString(); 

    private String title; 
    private String description; 
    private String authors; 
    private RealmList<Tag> tags; 
} 

Ich mag würde alle Artikel abzufragen, welche Titel oder Beschreibung oder Tags, die Liste der Zeichenfolgen enthalten.

Ich weiß, dass das Prädikat „in“ verwendet werden kann, um eine Liste von Werten zu einem Feld entsprechen, wie folgt:

realm.where(Article.class).beginGroup().in("title", listOfValues Case.INSENSITIVE).or().in("description", listOfValues, Case.INSENSITIVE).or().in("tags.tag",listOfValues, Case.INSENSITIVE).findAll(); 

Dies wird nur Rückgabewert „ passend“, aber ich bin Suchen nach "enthält" Werte. Es gibt auch das "enthält" Prädikat, aber ich denke es kann nur mit einem Wert verglichen werden.

Gibt es trotzdem etwas zu tun?

+1

Ich denke, Sie müssen durchlaufen und verwenden 'contains' – EpicPandaForce

+0

@EpicPandaForce Yeap, dachte ich, das zu tun. Planen Sie, etwas Ähnliches in den Rückstand aufzunehmen? Ich werde die Lösung inzwischen posten. Vielen Dank – user274051

Antwort

1

Eine Arbeit um diese Frage zu lösen ist wie @EpicPandaForce in seinem Kommentar vorgeschlagen, iterieren und verwenden enthält. Hier ist der Code, dies zu tun:

RealmResults<Article> newResults; 
RealmQuery<Article> where = r.where(Article.class).beginGroup(); 
for (String keyword : keywords) { 
    where = where.contains("name", keyword, Case.INSENSITIVE) 
      .or() 
      .contains("description", keyword, Case.INSENSITIVE) 
      .or() 
      .equalTo("tags.tag", keyword, Case.INSENSITIVE); 
} 

newResults = where.endGroup().findAll(); 
Verwandte Themen