该领域文档给出了一个使用人物对象和狗对象的反向链接示例。如果我把它扩展到包括猫,那么一个人可以有几只狗或猫走路,每只狗或猫可以由几个不同的人走路。查询具有多个反向链接的领域
public class Dog : RealmObject
{
public string Name { get; set; }
[Backlink(nameof(Person.Dogs))]
public IQueryable<Person> Walkers { get; }
}
public class Cat : RealmObject
{
public string Name { get; set; }
[Backlink(nameof(Person.Cats))]
public IQueryable<Person> Walkers { get; }
}
public class Person : RealmObject
{
//... other properties (name, age, address, etc.)
public IList<Dog> Dogs { get; }
public IList<Cat> Cats { get; }
}
使用反向让我得到谁遛狗菲多的人的名单...
var fidoWalkers = realm.All<Dog>().Where(d => d.Name == "Fido").FirstOrDefault().Walkers;
我现在可以进一步扩大此查询找到谁住在大街菲的步行者或谁是30岁以下或其他......迄今为止都很棒。
现在我想要得到一个走狗Fido和猫咪Moggie的人的名单。在两个单独的声明中使用反向链接,我可以得到两个结果集,一个用于Fido步行者,一个用于Moggie步行者,但我不知道如何组合它们。无论是我能制定出一个查询,将让我这样做“很长的路要走轮”不使用反向链接,因为每当我尝试使用
...Where(P => p.Dogs.Contains(Fido))...
我得到的“System.NotSupportedException:方法‘包含’被不支持“
有没有什么办法可以获得由狗和猫列表过滤的人列表?
很好的答案谢谢你 - 现在我有了更好的理解。我的实际模型显然要复杂得多(实际上是一个缝纫模式对象的目录,每个模型对象都有多种服装类型,织物类型,类别和标签等),但是我会考虑改变模型结构与速度/记忆命中的实用性在内存列表上运行LINQ查询。需要更多实验...... – sparks
@sparks没问题,我个人认为使用Realm时最佳内存/ CPU使用率所需的一件事是设计适合您应用使用模式的Realm模型的能力。当客户说模型可以*不*改变**期**时,我倾向于SQLite。当我们有从App使用的角度重新思考模型的自由时,Realm在性能,使用“实时”对象等方面可以是惊人的......但通常原始模型结束(高度)非规范化并且我们在服务器上创建一个数据映射来处理JSON序列化/反序列化...... – SushiHangover
@sparks就'应用程序使用模式'而言,我看每页,屏幕,表,Activity,片段,UITableView等显示的内容...这是我的Realm模型的每个应用程序视图的开始。如果它没有显示在屏幕上,按API或同步/等使用的主键/隐藏键......我不包括它。在应用程序中显示数据之后,每种方法都是已知的,它变得“容易”;-)将所有这些小型模型片段建模成高度高性能的合并非规范化模型....更改模型的应用程序版本为通过Realm迁移处理。 – SushiHangover