結果コレクション
Realm 結果コレクションは、クエリ操作の遅延評価された結果を表します。 そのため、結果コレクションには、単一のRealm 型の 0 個以上のインスタンスが含まれます。
重要
結果は不変です。結果コレクションに要素を追加または削除することはできません。 これは、結果コレクションの内容がデータベースに対するクエリによって決定されるためです。
Realm のクエリ エンジンを使用して、任意のコレクションをフィルタリングおよびソートできます。 コレクションはライブであるため、現在のスレッド上の Realm インスタンスの現在の状態を常に反映します。 コレクション通知をサブスクライブして、コレクションの変更をリッスンすることもできます。
結果は遅延評価される
Realm は、結果コレクションの要素にアクセスするなど、そのクエリの結果を実際に要求した場合にのみクエリを実行します。 この遅延評価により、大規模なデータセットや複雑なクエリを処理するための洗練された高性能なコードを書込むことができます。
コレクションとの連携
コレクションはライブ
ライブ オブジェクトと同様に、Realm コレクションは通常ライブです。
ライブ結果のコレクションには、関連付けられているクエリの現在の結果が常に反映されます。
ライブリストには、Realm インスタンス上の関係の現在の状態が常に反映されます。
ただし、コレクションがライブではない場合が 2 つあります。
コレクションは管理されていません。 たとえば、まだ Realm に追加されていない Realm オブジェクト、または Realm からコピーされた Realm オブジェクトの コレクション プロパティ。
コレクションは固定されています。
コレクション通知と組み合わせると、ライブ コレクションによりクリーンでリアクティブなコードが可能になります。 たとえば、ビューにクエリの結果が表示されるとします。 ビュー クラスで結果コレクションへの参照を保持すると、結果コレクションを更新したり最新であることを検証したりすることなく、必要に応じて結果コレクションを読み取ることができます。
重要
インデックスは変更される可能性があります
結果は自動的に更新されるため、 コレクション内のオブジェクトの位置インデックスやコレクション内のオブジェクトの数を保存しないでください。 保存されたインデックスやカウント値は、使用する時間によって期限切れになる可能性があります。
次の例は、結果コレクションをいくつかの方法でクエリする方法を示しています。
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 でクエリ結果を制限するために特別なメカニズムは必要ありません。 たとえば、クエリが数千のオブジェクトと一致するが、最初の 10 個のオブジェクトのみをロードする場合は、結果コレクションの最初の 10 個の要素のみにアクセスします。
ページ分割
遅延評価の代わりに、ページ区切りの一般的なタスクが非常に簡単になります。 たとえば、Realm 内の数千のオブジェクトに一致するクエリに関連付けられた結果コレクションがあるとします。 ページごとに 100 個のオブジェクトを表示します。 任意のページに進むには、ターゲット ページに対応するインデックスから、結果コレクションの要素にアクセスします。