Vaclav が彼の回答で言及しているように、いつでも辞書全体を列挙し、必要に応じてフィルター処理できます。さらに、 特にIReliableDictionaryCreateEnumerableAsync(ITransaction, Func<TKey, Boolean>, EnumerationMode)
のドキュメントをご覧ください。これにより、前もって列挙に含めたいキーをフィルタリングできます。これにより、パフォーマンスが向上する可能性があります (たとえば、ディスクから不要な値をページングすることを回避することにより)。
簡単な例 (簡潔にするために例外処理/再試行などを省略):
var myDictionary = await this.StateManager.GetOrAddAsync<IReliableDictionary<int, string>>(new Uri("fabric:/myDictionary"));
using (var tx = this.StateManager.CreateTransaction())
{
// Fetch all key-value pairs where the key an integer less than 10
var enumerable = await myDictionary.CreateEnumerableAsync(tx, key => key < 10, EnumerationMode.Ordered);
var asyncEnumerator = enumerable.GetAsyncEnumerator();
while (await asyncEnumerator.MoveNextAsync(cancellationToken))
{
// Process asyncEnumerator.Current.Key and asyncEnumerator.Current.Value as you wish
}
}
キーに基づいて検索する REST クエリに対応する定型または動的キー フィルターを作成できます。独自のセカンダリ インデックスを作成するには、通知を使用します。