我正在尝试在领域中搜索嵌套对象,但是我收到以下错误
var contactList = realm.All<Contact>().Where( c => c.syncInfo.isSync == SyncStatus.NOT_SYNCED);
System.NotSupportedException:Equal运算符的左侧 必须能够直接访问Realm中的持久属性。
无法处理&#c; c.syncInfo.isSync&#39;。
我知道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
会降低效果。
答案 0 :(得分:0)
尝试。在哪里(c =&gt; c.syncInfo.isSync == SyncStatus.NOT_SYNCED.isSync&amp;&amp; c.syncInfo.timestamp == SyncStatus.NOT_SYNCED.timestamp)
答案 1 :(得分:0)
看起来Contact
和SyncInfo
之间存在一对一的映射。所以你最好的选择是合并它们:
public class Contact : RealmObject
{
[PrimaryKey]
public Id {get;set;}
public ContactName {get; set;}
public int isSync { get; set; }
public long timestamp {get;set;}
}
这也会改善设计,因为您不必删除旧版SyncInfo
(例如,更换联系人上的同步信息时)。
答案 2 :(得分: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);