Coleções de resultados
Uma collection de resultados do Realm representa os resultados avaliados de forma preguiçosa de uma operação de query. Dessa forma, uma collection de resultados contém zero ou mais instâncias de um único tipo de Realm.
Importante
Os resultados são imutáveis: você não pode adicionar ou remover elementos na collection de resultados. Isso ocorre porque o conteúdo de uma collection de resultados é determinado por uma query para o reconhecimento de data center.
Você pode filtrar e classificar qualquer coleção usando o mecanismo de query do Realm. As coleções estão ativas, então elas sempre refletem o estado atual da instância do reino na thread atual. Você também pode ouvir as alterações na coleção assinando as notificações da coleção.
Os resultados são avaliados preguiçosamente
O Realm só realiza uma query quando você realmente solicita os resultados dessa query, por exemplo, acessando elementos da coleção de resultados. Com essa avaliação preguiçosa, você consegue escrever um código elegante e de alto desempenho para lidar com grandes conjuntos de dados e queries complexas.
Trabalhando com collection
As coleções estão ativas
Assim como os objetos ativos, as coleções de Realm geralmente são ativas:
As coleções de resultados ativas sempre refletem os resultados atuais da query associada.
Listas ativas sempre refletem o estado atual do relacionamento na Instância de Realm.
No entanto, há dois casos em que uma coleção não está ativa:
A collection não está gerenciada. Por exemplo, uma propriedade de collection de um Objeto de Realm que ainda não tenha sido adicionado a um Realm ou que tenha sido copiado de um Realm.
A coleção está congelada.
Combinadas com notificações de coleção, as coleções dinâmicas permitem código limpo e reativo. Por exemplo, suponha que sua visualização exiba os resultados de uma query. Você pode manter uma referência à coleção de resultados em sua classe de exibição e, em seguida, ler a coleção de resultados conforme necessário sem precisar atualizá-la ou validar se ela está atualizada.
Importante
Os índices podem mudar
Como os resultados se atualizam automaticamente, não armazene o índice posicional de um objeto na coleção ou a contagem de objetos em uma coleção. O índice armazenado ou o valor de contagem podem estar desatualizados no momento em que você o utiliza.
O exemplo a seguir mostra como consultar uma coleção de resultados de várias maneiras:
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'");
Limitando resultados da consulta
Como resultado da avaliação preguiçosa, você não precisa de nenhum mecanismo especial para limitar os resultados da consulta com o Realm. Por exemplo, se a sua consulta corresponder a milhares de objetos, mas você quiser carregar somente os dez primeiros, basta acessar somente os dez primeiros elementos da collection de resultados.
Paginação
Graças à avaliação preguiçosa, a tarefa comum da paginação se torna bastante simples. Por exemplo, suponha que você tenha uma coleção de resultados associada a uma consulta que corresponda a milhares de objetos em seu domínio. Você exibe cem objetos por página. Para avançar para qualquer página, basta acessar os elementos da coleta de resultados começando pelo índice que corresponde à página de destino.