バージョン10.2.0の新機能。
Overview
C# {実装} Realmコレクション を除くすべてのRealmタイプの値をサポートします。セットを定義するには、 getter 専用の プロパティを使用します。ここで、ISet<TValue> TValueはサポートされている 型のいずれかです。
データベースからオブジェクトを削除すると、そのオブジェクトが存在していたすべてのセットからそのオブジェクトが削除されます。 したがって、オブジェクトのセットに null オブジェクトが含まれることはありません。 ただし、プリミティブ型のセットには null 値を含めることができます。 セットで null 値を許可しない場合は、セット宣言で null 以外の型を使用します(たとえば、ISet<double> ではなくISet<double?> を使用します)。古いスキーマ型定義(クラスはRealmObject基本クラスから派生している)を使用している場合、または null 可能性が有効になっていない場合、セットに null 可能な参照型が含まれている場合は、 [Required]属性を使用する必要があります。 stringまたはbyte[] 。
重要
同期はサポートされていません
ローカルのみの Realm は null 可能な(任意)値のコレクションをサポートしていますが、 Syncはサポートしていません。
セットの種類
次のコードは、セット タイプの例を示しています。
public partial class Inventory : IRealmObject { // A Set can contain any Realm-supported type, including // objects that inherit from RealmObject public ISet<Plant> PlantSet { get; } public ISet<double> DoubleSet { get; } // Nullable types are supported in local-only // Realms, but not with Sync public ISet<int?> NullableIntsSet { get; } public ISet<string> RequiredStrings { get; } }
使用例
次のコードは、セットの作成方法、セットへの書込み方法、読み取り方法を示しています。
var inventory = new Inventory(); inventory.PlantSet.Add(new Plant() { Name = "Prickly Pear" }); inventory.DoubleSet.Add(123.45); realm.Write(() => { realm.Add<Inventory>(inventory); }); // convert the Plant Set to an IQueryable and apply a filter var pricklyPear = inventory.PlantSet.AsRealmQueryable() .Where(p => p.Name == "Prickly Pear"); // Alternatively, apply a filter directly on the Plant Set var pricklyPearPlants = inventory.PlantSet .Filter("Name == 'Prickly Pear'"); // Find all Inventory items that have at least one value in their // DoubleSet that is larger than 5 var moreThan100 = realm.All<Inventory>() .Filter("DoubleSet.@values > 100");
変更の監視
INotifyCollectionchanged.Collectionchanged セットのイベントを使用してセットへの変更を監視し、INotifyPropertychanged.PropertyChecked イベントを使用してセット内の特定のプロパティに対する変更を監視できます。
次のコード例では、 StringSetという名前のISet<string>プロパティを持つクラスがあります。 CollectionChangedイベントとPropertyChangedイベントの両方のイベント ハンドラーを設定します。
var stringSet = container.StringSet.AsRealmCollection(); stringSet.CollectionChanged += (sender, e) => { Console.WriteLine($"Set {sender} changed: {e.Action}"); }; stringSet.PropertyChanged += (sender, e) => { Console.WriteLine($"Property changed on {sender}: {e.PropertyName}"); };