Aller au contenu principal

Énumération dans les modèles - Guide des méthodes de données

PDF4meLe moteur de génération de documents de offre des méthodes d'énumération puissantes pour manipuler les collections de données au sein de modèles. Ces méthodes, similaires à C# IEnumerable, offrent un contrôle complet des opérations sur les données, notamment le tri, le filtrage, l'agrégation et la transformation.


Méthodes d'énumération disponibles

Les méthodes suivantes peuvent être appliquées aux collections de vos modèles pour traiter et manipuler les données de manière dynamique :

Méthodes de filtrage et de validation

All(Predicate) - Détermine si tous les éléments satisfont à une condition

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

Any() - Détermine si une collection contient des éléments

employees.Any()

Any(Predicate) - Détermine si un élément quelconque satisfait une condition

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

Contains(Object) - Détermine si une collection contient un élément spécifique

employees.Contains(otherPersons.First())

Méthodes d'agrégation

Average(Selector) - Calcule la moyenne d'une collection numérique

employees.Average(p => p.Age)

Count() - Renvoie le nombre d'éléments dans une collection

employees.Count()

Count(Predicate) - Renvoie le nombre d'éléments qui satisfont une condition

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

Max(ComparableSelector) - Renvoie la valeur maximale d'une collection

employees.Max(p => p.Age)

Min(ComparableSelector) - Renvoie la valeur minimale d'une collection

employees.Min(p => p.Age)

Sum(Selector) - Calcule la somme des valeurs numériques d'une collection

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

Méthodes de sélection et de projection

First() - Renvoie le premier élément d'une collection

employees.First()

First(Predicate) - Renvoie le premier élément qui satisfait une condition

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

FirstOrDefault() Renvoie le premier élément, ou une valeur par défaut si vide.

employees.FirstOrDefault()

FirstOrDefault(Predicate) - Renvoie le premier élément qui satisfait une condition, ou la valeur par défaut

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

Last() - Renvoie le dernier élément d'une collection

employees.Last()

Last(Predicate) - Renvoie le dernier élément qui satisfait une condition

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

LastOrDefault() Renvoie le dernier élément, ou une valeur par défaut si la liste est vide.

employees.LastOrDefault()

LastOrDefault(Predicate) - Renvoie le dernier élément qui satisfait une condition, ou la valeur par défaut

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

Single() - Renvoie le seul élément d'une collection

employees.Single()

Single(Predicate) - Renvoie le seul élément qui satisfait une condition

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

SingleOrDefault() Renvoie le seul élément, ou une valeur par défaut si l'élément est vide.

employees.SingleOrDefault()

SingleOrDefault(Predicate) - Renvoie le seul élément qui satisfait une condition, ou la valeur par défaut

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

Méthodes de commande

OrderBy(ComparableSelector) - Trie les éléments par ordre croissant

employees.OrderBy(p => p.Age)

Peut être combiné avec une commande supplémentaire :

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

OrderByDescending(ComparableSelector) - Trie les éléments par ordre décroissant

employees.OrderByDescending(p => p.Age)

Peut être combiné avec une commande supplémentaire :

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

Opérations de recouvrement

Concat(IEnumerable) - Concaténe deux collections

employees.Concat(otherPersons)

Distinct() - Renvoie les éléments distincts d'une collection

employees.Distinct()

Union(IEnumerable) - Produit l'union de deux collections

employees.Union(otherPersons)

Where(Predicate) - Filtre les éléments en fonction d'une condition

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

Opérations d'ensemble

Skip(int) - Contourne un nombre spécifié d'éléments

employees.Skip(10)

SkipWhile(Predicate) - Contourne les éléments tant qu'une condition est vraie

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

Take(int) - Renvoie un nombre spécifié d'éléments

employees.Take(5)

TakeWhile(Predicate) - Renvoie des éléments tant qu'une condition est vraie

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

Méthodes de transformation

Select(Selector) - Projette chaque élément dans une nouvelle forme

employees.Select(p => p.Name)

SelectMany(EnumerationSelector) - Projets et aplatissement des collections

employees.SelectMany(p => p.Children)

GroupBy(Selector) - Groupe les éléments selon une clé spécifiée

employees.GroupBy(p => p.Age)

Possibilité de regrouper selon plusieurs propriétés :

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

Exemples pratiques

Exemple 1 : Filtrage et comptage

Modèle:

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

Exemple 2 : Affichage conditionnel

Modèle:

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

Exemple 3 : Listes triées

Modèle:

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

Exemple 4 : Données groupées

Modèle:

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

Enchaînement de méthodes

Plusieurs méthodes d'énumération peuvent être enchaînées pour des opérations de données complexes :

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

Cette expression :

  1. Filtre les employés de plus de 25 ans
  2. Les trie par nom
  3. Prend les 10 premiers résultats
  4. Sélectionne uniquement leurs noms

Meilleures pratiques

  1. Utilisez efficacement les prédicats - Filtrer les données le plus tôt possible dans la chaîne
  2. Évitez les expressions complexes - Décomposer une logique complexe en plusieurs étapes
  3. Test avec des données d'exemple - Vérifiez que les méthodes d'énumération fonctionnent avec votre structure de données
  4. Gérer les collections vides - Utiliser Any() vérifier avant de traiter les collections
  5. Optimiser les performances - Minimiser les appels de méthodes d'énumération dans les boucles

:::Considérations relatives aux performances

Lorsque vous travaillez avec de grands ensembles de données, envisagez de filtrer et de limiter les données à la source plutôt que dans le modèle pour de meilleures performances.

:::