簡體   English   中英

如何在同一個Realm查詢中查詢兩個字段?

[英]How to query two fields in same Realm query?

我需要根據姓氏和名字找到Realm Db的客戶。 目前,我有這樣的查詢:

RealmResults<CustomerModel> results = realm
            .where(CustomerModel.class)
            .or()
            .contains("firstname", input, Case.INSENSITIVE)
            .or()
            .contains("lastname", input, Case.INSENSITIVE)
            .or()
            .contains("addresses.street", input, Case.INSENSITIVE)
            .or()
            .contains("addresses.city", input, Case.INSENSITIVE)
            .or()
            .contains("addresses.postcode", input, Case.INSENSITIVE)
            .findAllSorted("customerLocalId", Sort.DESCENDING);

這不能正常工作,因為我在名字和姓氏之間有OR。

所以,如果我想找到名為John Doe的用戶,它就找不到它,但如果我只輸入John就會找到它。

我怎么能解決這個問題?

為什么不跨越白色空間?

String filter = input.trim().replaceAll("\\s+", " ");
String[] tokens = filter.split(" ");
RealmQuery<CustomerModel> query = realm.where(CustomerModel.class);

for(int i = 0, size = tokens.length; i < size; i++) {
    String token = tokens[i];
    if(i != 0) {
        query.or();
    }
    query.contains("firstname", token, Case.INSENSITIVE)
        .or()
        .contains("lastname", token, Case.INSENSITIVE)
        .or()
        .contains("addresses.street", token, Case.INSENSITIVE)
        .or()
        .contains("addresses.city", token, Case.INSENSITIVE)
        .or()
        .contains("addresses.postcode", token, Case.INSENSITIVE)        
}

RealmResults<CustomerModel> results = query
        .findAllSorted("customerLocalId", Sort.DESCENDING);

您需要使用組: https//realm.io/docs/java/latest/#logical-operators

RealmResults<CustomerModel> results = realm
        .where(CustomerModel.class)
        .beginGroup()
        .contains("firstname", input, Case.INSENSITIVE)
        .contains("lastname", input, Case.INSENSITIVE)
        .endGroup()
        .or()
        .contains("addresses.street", input, Case.INSENSITIVE)
        .or()
        .contains("addresses.city", input, Case.INSENSITIVE)
        .or()
        .contains("addresses.postcode", input, Case.INSENSITIVE)
        .findAllSorted("customerLocalId", Sort.DESCENDING);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM