Enumeración en plantillas - Guía de métodos de datos
PDF4meEl motor de generación de documentos de proporciona métodos de enumeración potentes para manipular colecciones de datos dentro de las plantillas. Estos métodos, similares a C# IEnumerableOfrecen un control integral sobre las operaciones de datos, incluyendo la clasificación, el filtrado, la agregación y la transformación.
Métodos de enumeración disponibles
Los siguientes métodos se pueden aplicar a las colecciones dentro de sus plantillas para procesar y manipular datos de forma dinámica:
Métodos de filtrado y validación
All(Predicate) - Determina si todos los elementos cumplen una condición.
[employees.All(p => p.Age < 50)]
Any() - Determina si una colección contiene algún elemento
employees.Any()
Any(Predicate) - Determina si algún elemento satisface una condición.
employees.Any(p => p.Name == "Mary Doe")
Contains(Object) - Determina si una colección contiene un elemento específico.
employees.Contains(otherPersons.First())
Métodos de agregación
Average(Selector) - Calcula el promedio de una colección numérica
employees.Average(p => p.Age)
Count() - Devuelve el número de elementos en una colección.
employees.Count()
Count(Predicate) - Devuelve el número de elementos que satisfacen una condición.
employees.Count(p => p.Age > 30)
Max(ComparableSelector) - Devuelve el valor máximo en una colección.
employees.Max(p => p.Age)
Min(ComparableSelector) - Devuelve el valor mínimo en una colección.
employees.Min(p => p.Age)
Sum(Selector) - Calcula la suma de los valores numéricos en una colección.
employees.Sum(p => p.Children.Count())
Métodos de selección y proyección
First() - Devuelve el primer elemento de una colección.
employees.First()
First(Predicate) - Devuelve el primer elemento que satisface una condición.
employees.First(p => p.Age > 30)
FirstOrDefault() - Devuelve el primer elemento, o un valor predeterminado si está vacío.
employees.FirstOrDefault()
FirstOrDefault(Predicate) - Devuelve el primer elemento que satisface una condición o valor predeterminado.
employees.FirstOrDefault(p => p.Age > 30)
Last() - Devuelve el último elemento de una colección.
employees.Last()
Last(Predicate) - Devuelve el último elemento que satisface una condición.
employees.Last(p => p.Age > 100)
LastOrDefault() - Devuelve el último elemento, o un valor predeterminado si está vacío.
employees.LastOrDefault()
LastOrDefault(Predicate) - Devuelve el último elemento que satisface una condición o valor predeterminado.
employees.LastOrDefault(p => p.Age > 100)
Single() - Devuelve el único elemento de una colección.
employees.Single()
Single(Predicate) - Devuelve el único elemento que satisface una condición.
employees.Single(p => p.Name == "John Smith")
SingleOrDefault() - Devuelve el único elemento, o un valor predeterminado si está vacío.
employees.SingleOrDefault()
SingleOrDefault(Predicate) - Devuelve el único elemento que satisface una condición o un valor predeterminado.
employees.SingleOrDefault(p => p.Name == "Mary Doe")
Métodos de pedido
OrderBy(ComparableSelector) - Ordena los elementos en orden ascendente
employees.OrderBy(p => p.Age)
Se puede encadenar con un ordenamiento adicional:
employees.OrderBy(p => p.Age).ThenByDescending(p => p.Name)
OrderByDescending(ComparableSelector) - Ordena los elementos en orden descendente
employees.OrderByDescending(p => p.Age)
Se puede encadenar con un ordenamiento adicional:
employees.OrderByDescending(p => p.Age).ThenByDescending(p => p.Name)
Operaciones de cobro
Concat(IEnumerable) - Concatena dos colecciones
employees.Concat(otherPersons)
Distinct() - Devuelve elementos distintos de una colección.
employees.Distinct()
Union(IEnumerable) - Produce la unión de dos colecciones
employees.Union(otherPersons)
Where(Predicate) - Filtra elementos en función de una condición.
employees.Where(p => p.Age > 18)
Operaciones de conjunto
Skip(int) - Omite un número específico de elementos.
employees.Skip(10)
SkipWhile(Predicate) - Omite elementos siempre que se cumpla una condición.
employees.SkipWhile(p => p.Age < 35)
Take(int) - Devuelve un número específico de elementos.
employees.Take(5)
TakeWhile(Predicate) - Devuelve elementos siempre que se cumpla una condición.
employees.TakeWhile(p => p.Age < 50)
Métodos de transformación
Select(Selector) - Proyecta cada elemento en una nueva forma
employees.Select(p => p.Name)
SelectMany(EnumerationSelector) - Proyectos y colecciones aplanadas
employees.SelectMany(p => p.Children)
GroupBy(Selector) - Agrupa elementos por una clave específica.
employees.GroupBy(p => p.Age)
Se puede agrupar por múltiples propiedades:
employees.GroupBy(p => new { Age = p.Age, Count = p.Children.Count() })
Ejemplos prácticos
Ejemplo 1: Filtrado y conteo
Plantilla:
Total employees over 30: <<[employees.Count(p => p.Age > 30)]>>
Average age: <<[employees.Average(p => p.Age)]>>
Ejemplo 2: Visualización condicional
Plantilla:
<<if [employees.Any(p => p.Age > 50)]>>
We have senior employees in the team.
<</if>>
Ejemplo 3: Listas ordenadas
Plantilla:
<<foreach [emp in employees.OrderBy(p => p.Name)]>>
- <<[emp.Name]>> (Age: <<[emp.Age]>>)
<</foreach>>
Ejemplo 4: Datos agrupados
Plantilla:
<<foreach [group in employees.GroupBy(p => p.Department)]>>
Department: <<[group.Key]>>
Employee Count: <<[group.Count()]>>
<</foreach>>
Encadenamiento de métodos
Se pueden encadenar varios métodos de enumeración para realizar operaciones de datos complejas:
<<[employees
.Where(p => p.Age > 25)
.OrderBy(p => p.Name)
.Take(10)
.Select(p => p.Name)]>>
Esta expresión:
- Filtra a los empleados mayores de 25 años.
- Los ordena por nombre
- Toma los primeros 10 resultados
- Selecciona solo sus nombres
Mejores prácticas
- Utilice los predicados de forma eficiente. - Filtrar los datos lo antes posible en la cadena.
- Evite expresiones complejas - Desglosar la lógica compleja en varios pasos.
- Prueba con datos de muestra - Verifica que los métodos de enumeración funcionen con tu estructura de datos.
- Gestionar colecciones vacías - Usar
Any()verificar antes de procesar las colecciones - Optimizar el rendimiento - Minimizar las llamadas a métodos de enumeración en bucles.
:::Consejo: Consideraciones sobre el rendimiento Al trabajar con grandes conjuntos de datos, considere filtrar y limitar los datos en la fuente en lugar de en la plantilla para obtener un mejor rendimiento.
:::