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:
- Filtra funcionários com mais de 25 anos de idade.
- Ordena-os por nome.
- Considera os 10 primeiros resultados.
- Seleciona apenas os nomes.
Melhores práticas
- Utilize predicados de forma eficiente. - Filtrar os dados o mais cedo possível na cadeia
- Evite expressões complexas - Dividir uma lógica complexa em várias etapas
- Teste com dados de amostra - Verifique se os métodos de enumeração funcionam com sua estrutura de dados.
- Gerenciar coleções vazias - Usar
Any()verificar antes de processar as cobranças - 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.
:::