更好的解决方法来搜索领域xamarin中的嵌套对象

时间:2017-05-30 13:45:32

标签: c# xamarin realm

我正在尝试在领域中搜索嵌套对象,但是我收到以下错误

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会降低效果。

I tried to refer this thread but no luck

3 个答案:

答案 0 :(得分:0)

尝试。在哪里(c =&gt; c.syncInfo.isSync == SyncStatus.NOT_SYNCED.isSync&amp;&amp; c.syncInfo.timestamp == SyncStatus.NOT_SYNCED.timestamp)

答案 1 :(得分: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(例如,更换联系人上的同步信息时)。

答案 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);