Pular para o conteúdo principal

Enumeração em Modelos - Guia de Métodos de Dados

PDF4meO mecanismo de geração de documentos do [nome da empresa] fornece métodos de enumeração poderosos para manipular coleções de dados em modelos. Esses métodos são semelhantes a C# IEnumerable, oferecem controle abrangente sobre as operações de dados, incluindo classificação, filtragem, agregação e transformação.


Métodos de enumeração disponíveis

Os seguintes métodos podem ser aplicados a coleções dentro de seus modelos para processar e manipular dados dinamicamente:

Métodos de Filtragem e Validação

All(Predicate) - Determina se todos os elementos satisfazem uma condição.

[employees.All(p => p.Age < 50)]

Any() - Determina se uma coleção contém algum elemento

employees.Any()

Any(Predicate) - Determina se algum elemento satisfaz uma condição.

employees.Any(p => p.Name == "Mary Doe")

Contains(Object) - Determina se uma coleção contém um elemento específico.

employees.Contains(otherPersons.First())

Métodos de agregação

Average(Selector) - Calcula a média de uma coleção numérica

employees.Average(p => p.Age)

Count() - Retorna o número de elementos em uma coleção

employees.Count()

Count(Predicate) - Retorna o número de elementos que satisfazem uma condição.

employees.Count(p => p.Age > 30)

Max(ComparableSelector) - Retorna o valor máximo em uma coleção

employees.Max(p => p.Age)

Min(ComparableSelector) - Retorna o valor mínimo em uma coleção

employees.Min(p => p.Age)

Sum(Selector) - Calcula a soma dos valores numéricos em uma coleção

employees.Sum(p => p.Children.Count())

Métodos de seleção e projeção

First() - Retorna o primeiro elemento de uma coleção

employees.First()

First(Predicate) - Retorna o primeiro elemento que satisfaz uma condição.

employees.First(p => p.Age > 30)

FirstOrDefault() - Retorna o primeiro elemento ou um valor padrão se estiver vazio.

employees.FirstOrDefault()

FirstOrDefault(Predicate) - Retorna o primeiro elemento que satisfaz uma condição, ou o valor padrão.

employees.FirstOrDefault(p => p.Age > 30)

Last() - Retorna o último elemento de uma coleção

employees.Last()

Last(Predicate) - Retorna o último elemento que satisfaz uma condição.

employees.Last(p => p.Age > 100)

LastOrDefault() - Retorna o último elemento ou um valor padrão se estiver vazio.

employees.LastOrDefault()

LastOrDefault(Predicate) - Retorna o último elemento que satisfaz uma condição, ou o valor padrão.

employees.LastOrDefault(p => p.Age > 100)

Single() - Retorna o único elemento de uma coleção

employees.Single()

Single(Predicate) - Retorna o único elemento que satisfaz uma condição.

employees.Single(p => p.Name == "John Smith")

SingleOrDefault() - Retorna o único elemento ou um valor padrão se estiver vazio.

employees.SingleOrDefault()

SingleOrDefault(Predicate) - Retorna o único elemento que satisfaz uma condição, ou o valor padrão.

employees.SingleOrDefault(p => p.Name == "Mary Doe")

Métodos de encomenda

OrderBy(ComparableSelector) - Ordena os elementos em ordem crescente

employees.OrderBy(p => p.Age)

Pode ser encadeado com pedidos adicionais:

employees.OrderBy(p => p.Age).ThenByDescending(p => p.Name)

OrderByDescending(ComparableSelector) - Ordena os elementos em ordem decrescente

employees.OrderByDescending(p => p.Age)

Pode ser encadeado com pedidos adicionais:

employees.OrderByDescending(p => p.Age).ThenByDescending(p => p.Name)

Operações de Cobrança

Concat(IEnumerable) - Concatena duas coleções

employees.Concat(otherPersons)

Distinct() - Retorna elementos distintos de uma coleção

employees.Distinct()

Union(IEnumerable) - Produz a união de dois conjuntos.

employees.Union(otherPersons)

Where(Predicate) - Filtra elementos com base em uma condição

employees.Where(p => p.Age > 18)

Operações de conjunto

Skip(int) - Ignora um número específico de elementos

employees.Skip(10)

SkipWhile(Predicate) - Ignora elementos enquanto uma condição for verdadeira

employees.SkipWhile(p => p.Age < 35)

Take(int) - Retorna um número especificado de elementos

employees.Take(5)

TakeWhile(Predicate) - Retorna elementos desde que uma condição seja verdadeira

employees.TakeWhile(p => p.Age < 50)

Métodos de transformação

Select(Selector) - Projeta cada elemento em uma nova forma

employees.Select(p => p.Name)

SelectMany(EnumerationSelector) - Projetos e coleções niveladas

employees.SelectMany(p => p.Children)

GroupBy(Selector) - Agrupa elementos por uma chave especificada

employees.GroupBy(p => p.Age)

É possível agrupar por múltiplas propriedades:

employees.GroupBy(p => new { Age = p.Age, Count = p.Children.Count() })

Exemplos práticos

Exemplo 1: Filtragem e Contagem

Modelo:

Total employees over 30: <<[employees.Count(p => p.Age > 30)]>>
Average age: <<[employees.Average(p => p.Age)]>>

Exemplo 2: Exibição condicional

Modelo:

<<if [employees.Any(p => p.Age > 50)]>>
We have senior employees in the team.
<</if>>

Exemplo 3: Listas ordenadas

Modelo:

<<foreach [emp in employees.OrderBy(p => p.Name)]>>
- <<[emp.Name]>> (Age: <<[emp.Age]>>)
<</foreach>>

Exemplo 4: Dados Agrupados

Modelo:

<<foreach [group in employees.GroupBy(p => p.Department)]>>
Department: <<[group.Key]>>
Employee Count: <<[group.Count()]>>
<</foreach>>

Encadeamento de métodos

Vários métodos de enumeração podem ser encadeados para operações de dados complexas:

<<[employees
.Where(p => p.Age > 25)
.OrderBy(p => p.Name)
.Take(10)
.Select(p => p.Name)]>>

Esta expressão:

  1. Filtra funcionários com mais de 25 anos de idade.
  2. Ordena-os por nome.
  3. Considera os 10 primeiros resultados.
  4. Seleciona apenas os nomes.

Melhores práticas

  1. Utilize predicados de forma eficiente. - Filtrar os dados o mais cedo possível na cadeia
  2. Evite expressões complexas - Dividir uma lógica complexa em várias etapas
  3. Teste com dados de amostra - Verifique se os métodos de enumeração funcionam com sua estrutura de dados.
  4. Gerenciar coleções vazias - Usar Any() verificar antes de processar as cobranças
  5. Otimizar o desempenho - Minimizar as chamadas de métodos de enumeração em loops

:::Dica Considerações sobre desempenho Ao trabalhar com grandes conjuntos de dados, considere filtrar e limitar os dados na origem, em vez de no modelo, para obter melhor desempenho.

:::