Docs 菜单
Docs 主页
/ /
支持的数据类型

collection - .NET SDK

Realm collection表示查询操作的延迟计算结果。因此,collection包含零个或多个单一Realm 实例的实例。

重要

结果不可变:您无法在结果collection上添加或删除元素。这是因为结果集合的内容是由对数据库的查询确定的。

您可以使用 Realm 的查询引擎对任意集合进行筛选和排序。集合为实时对象,因此它们始终会反映当前线程上 Realm 实例的当前状态。此外,还可通过订阅集合通知来侦听集合中的更改。

Realm 仅在您实际请求该查询的结果时才会运行查询,例如通过访问结果集合的元素。此延迟求值机制可让您编写优雅、高性能的代码来处理大型数据集和复杂查询。

活动对象一样,Realm 集合通常也为实时集合:

  • 实时结果集合始终会反映关联查询的当前结果。

  • 实时列表始终会反映 Realm 实例上关系的当前状态。

但是,集合在两种情况下会处于实时状态:

  • 该collection为非托管集合。例如,尚未添加到 Realm 或已从 Realm 复制的 Realm 对象的集合属性。

  • 集合已被冻结

集合通知相结合时,实时集合可实现简洁的响应式代码。例如,假设您的视图会显示查询结果。您可在视图类中保留对结果集合的引用,然后按需读取结果集合,而不必刷新该集合或验证其是否处于最新状态。

重要

索引可能会更改

由于结果会自动更新自身,因此请勿存储集合中对象的位置索引或集合中对象的数量。存储的索引或数量值在您使用时可能已过期。

以下示例展示了如何通过多种方式查询collection:

var plants = realm.All<Plant>();
// Use the Where operator to find items
// in the results collection
var pricklyPear = plants
.Where(plant => plant.Name == "Prickly Pear");
// Or apply a filter to the results collection
var pricklyPears = plants
.Filter("Name == 'Prickly Pear'");
// You can query collection properties in the same way
var morePlants = realm.All<Inventory>().ElementAt(0).Plants;
// Convert the Ilist<Plant> to an IQueryable and
// use the Where operator
var pricklyPearCacti = morePlants.AsQueryable()
.Where(plant => plant.Name == "Prickly Pear");
// Or apply a filter to the collection
var greenPlants = realm.All<Inventory>()
.Filter("Plants.Color CONTAINS[c] 'Green'");

由于出现延迟求值,因此无需任何特殊机制来限制 Realm 的查询结果。例如,如果您的查询匹配到数千个对象,但您只想加载前十个对象,则只需访问结果集合的前十个元素即可。

借助延迟求值,分页的常见任务变得非常简单。例如,假设您有一个与某一查询关联的结果集合,而该查询可与您 Realm 中的数千个对象匹配。您选择每页显示一百个对象。要前进到任一页面,只需从与目标页面相对应的索引开始访问结果集合中的元素即可。

后退

字段类型

在此页面上