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

C# 在领域xamarin中搜索嵌套对象的更好解决方法,c#,xamarin,realm,C#,Xamarin,Realm,我正在尝试搜索领域中的嵌套对象,但出现以下错误 var contactList = realm.All<Contact>().Where( c => c.syncInfo.isSync == SyncStatus.NOT_SYNCED); 到目前为止,我已尝试使用ToList()和foreach查找记录,但我有1000个联系人,因此使用ToList()和foreach会降低性能 试试。其中(c=>c.syncInfo.isSync==SyncStatus.NOT\u SYNC

我正在尝试搜索领域中的嵌套对象,但出现以下错误

var contactList = realm.All<Contact>().Where( c => c.syncInfo.isSync == SyncStatus.NOT_SYNCED);
到目前为止,我已尝试使用
ToList()
foreach
查找记录,但我有1000个联系人,因此使用
ToList()
foreach
会降低性能


试试。其中(c=>c.syncInfo.isSync==SyncStatus.NOT\u SYNCED.isSync&&c.syncInfo.timestamp==SyncStatus.NOT\u SYNCED.timestamp)

看起来在
联系人
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
s(例如,在更换联系人上的同步信息时)。

您可以这样做吗。将联系人存储在同步信息中

public class SyncInfo: RealmObject
{
    public Contact contact { get; set; }
    public int isSync { get; set; }     
    public long timestamp { get;set; }
}
然后像这样查询:


var unsyncedContacts=realm.All()。其中(s.isSync==SyncStatus.NOT\u SYNCED)。选择(s=>s.contact)

我还有20个模型,我不想复制
isSync
timestamp
字段,在域中,你不能扩展其他外部类,因此我想使用
SyncInfo
作为类成员作为合成,我没有得到这条语句
你不必删除旧的SyncInfo(例如,在替换联系人上的同步信息时)。
您能解释一下吗。例如,您有一个
联系人
带有
SyncInfo.isSync=false
。如果您从服务器获得一个新的
SyncInfo
var updateinfo=serverClient.GetSyncInfoForContact(contact.Id)
并将其分配给您的联系人:
contact.syncInfo=updateInfo
,以前的对象现在将悬空-未分配给任何对象,需要删除。我理解您关于不希望在许多类中复制属性的论点,它是有效的,但它是另一个字段(因为您正在复制
SyncInfo
属性)并将简化设计。我不认为这是op的问题,特别是如何查询嵌套对象。这不是。不确定为什么会将其标记为答案。它是否有效。这将不起作用,因为您将在何处得到错误
(c=>c.syncInfo.isSync==SyncStatus.NOT_SYNCED.isSync
执行
public class SyncInfo: RealmObject
{
    public Contact contact { get; set; }
    public int isSync { get; set; }     
    public long timestamp { get;set; }
}