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; }
}