2017-05-30 64 views
0

我試圖尋找嵌套對象的境界,但我得到以下錯誤更好的解決辦法來搜索嵌套對象的境界xamarin

var contactList = realm.All<Contact>().Where(c => c.syncInfo.isSync == SyncStatus.NOT_SYNCED); 

System.NotSupportedException:平等操作 的左手邊必須直接訪問Realm中的持久性屬性。

無法處理'c.syncInfo.isSync'。

我知道這個功能不存在Realm Xamarin但我尋找更好的解決方法。

public class Contact : RealmObject 
{ 
    [PrimaryKey] 
    public Id {get;set;} 

    public ContactName {get; set;} 

    public SyncInfo syncInfo; 
} 

public class SyncInfo: RealmObject 
{ 
    public int isSync { get; set; }  
    public long timestamp {get;set;} 
} 

到目前爲止,我還使用ToList()foreach來查找記錄,但我有1000個聯繫人嘗試了使用ToList()foreach減慢性能。

I tried to refer this thread but no luck

回答

0

看起來像有ContactSyncInfo之間的一對一映射。所以,你最好的選擇將它們合併:

public class Contact : RealmObject 
{ 
    [PrimaryKey] 
    public Id {get;set;} 

    public ContactName {get; set;} 

    public int isSync { get; set; }  

    public long timestamp {get;set;} 
} 

這將提高設計好了,因爲你不會有刪除舊SyncInfo S(例如更換上的接觸同步信息時)。

+0

我有20多個模型,其中我不想複製'isSync'和'timestamp'字段,在領域ü不能擴展其他外部類,因此我認爲使用'SyncInfo'作爲類成員作爲構成 – Hunt

+0

我沒有得到這個聲明'你不必刪除舊的SyncInfos(例如,當替換con上的同步信息時「可以請你解釋一下 – Hunt

+0

E.g.你有'Sync'與'SyncInfo.isSync = false'。如果你從服務器得到一個新的'SyncInfo':'var updatedInfo = serverClient.GetSyncInfoForContact(contact.Id)',並將它分配給你的聯繫人:'contact.syncInfo = updatedInfo',則前一個對象現在將懸空 - 未分配任何事情,將需要刪除。 –

0

嘗試。凡(C => c.syncInfo.isSync == SyncStatus.NOT_SYNCED.isSync & & c.syncInfo.timestamp == SyncStatus.NOT_SYNCED.timestamp)

+0

這不會去上班,你會得到錯誤'在哪裏=> c.syncInfo.isSync == SyncStatus.NOT_SYNCED.isSync'(C得到執行 – Hunt

0

你可以這樣做嗎?將聯繫人存儲在同步信息中。

public class SyncInfo: RealmObject 
{ 
    public Contact contact { get; set; } 
    public int isSync { get; set; }  
    public long timestamp { get;set; } 
} 

於是這樣的查詢:

var unsyncedContacts = realm.All<SyncInfo>().Where(s.isSync == SyncStatus.NOT_SYNCED).Select(s => s.contact);