2017-09-28 2 views
0

동시에 영역의 문자열 값 목록을 포함하는 여러 필드를 쿼리하려고합니다. 내가 좋아하는 것문자열 값 목록을 포함하는 여러 필드를 쿼리 할 수 ​​있습니까 (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; 
} 

문자열의 목록을 포함 어떤 제목 또는 설명 또는 태그 모든 기사를 조회 : 나는 다음과 같은 개체가 있다고 가정 할 수 있습니다.

나는 다음과 같이 술어 "에 는"필드에 값 목록을 일치시키는 데 사용 될 수 있다는 사실을 알고 :

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

이는 값 " 일치"반환하지만 나는 "포함"값을 찾으십시오. "contains"술어도 있지만, 하나의 값과 만 비교할 수 있다고 생각합니다.

어쨌든 이것을 할 수 있습니까?

+1

당신이 반복하고 사용해야합니다 생각은 '나는 그렇게 생각했다, – EpicPandaForce

+0

@EpicPandaForce 엡를 contains'. 백로 그와 비슷한 것을 포함시킬 계획입니까? 나는 그 동안 해결책을 게시 할 것이다. 감사 – user274051

답변

1

이 질문을 해결하기위한 해결 방법은 @EpicPandaForce가 그의 의견에서 제안한대로 iterate와 use를 포함하는 것입니다. 다음은이 작업을 수행하는 코드입니다 :

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();