Zum Hauptinhalt springen

Aufzählungen in Vorlagen – Leitfaden zu Datenmethoden

PDF4meDie Dokumentengenerierungs-Engine von bietet leistungsstarke Enumerationsmethoden zur Bearbeitung von Datensammlungen innerhalb von Vorlagen. Diese Methoden ähneln denen von C# IEnumerableSie bieten umfassende Kontrolle über Datenoperationen wie Sortieren, Filtern, Aggregieren und Transformieren.


Verfügbare Aufzählungsmethoden

Die folgenden Methoden können auf Sammlungen innerhalb Ihrer Vorlagen angewendet werden, um Daten dynamisch zu verarbeiten und zu bearbeiten:

Filter- und Validierungsmethoden

All(Predicate) - Prüft, ob alle Elemente eine Bedingung erfüllen

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

Any() - Ermittelt, ob eine Sammlung Elemente enthält

employees.Any()

Any(Predicate) - Ermittelt, ob ein Element eine Bedingung erfüllt.

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

Contains(Object) - Ermittelt, ob eine Sammlung ein bestimmtes Element enthält

employees.Contains(otherPersons.First())

Aggregationsmethoden

Average(Selector) Berechnet den Durchschnitt einer numerischen Sammlung

employees.Average(p => p.Age)

Count() Gibt die Anzahl der Elemente in einer Sammlung zurück

employees.Count()

Count(Predicate) Gibt die Anzahl der Elemente zurück, die eine Bedingung erfüllen.

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

Max(ComparableSelector) Gibt den Maximalwert einer Sammlung zurück.

employees.Max(p => p.Age)

Min(ComparableSelector) Gibt den Minimalwert einer Sammlung zurück.

employees.Min(p => p.Age)

Sum(Selector) Berechnet die Summe der numerischen Werte in einer Sammlung

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

Selektions- und Projektionsmethoden

First() Gibt das erste Element einer Sammlung zurück

employees.First()

First(Predicate) Gibt das erste Element zurück, das eine Bedingung erfüllt.

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

FirstOrDefault() Gibt das erste Element zurück oder einen Standardwert, falls die Liste leer ist.

employees.FirstOrDefault()

FirstOrDefault(Predicate) Gibt das erste Element zurück, das eine Bedingung erfüllt, oder den Standardwert.

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

Last() Gibt das letzte Element einer Sammlung zurück

employees.Last()

Last(Predicate) Gibt das letzte Element zurück, das eine Bedingung erfüllt.

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

LastOrDefault() Gibt das letzte Element zurück oder einen Standardwert, falls die Liste leer ist.

employees.LastOrDefault()

LastOrDefault(Predicate) Gibt das letzte Element zurück, das eine Bedingung erfüllt, oder den Standardwert.

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

Single() Gibt das einzige Element einer Sammlung zurück

employees.Single()

Single(Predicate) Gibt das einzige Element zurück, das eine Bedingung erfüllt.

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

SingleOrDefault() Gibt das einzige Element zurück oder einen Standardwert, falls die Funktion leer ist.

employees.SingleOrDefault()

SingleOrDefault(Predicate) Gibt das einzige Element zurück, das eine Bedingung erfüllt, oder den Standardwert.

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

Bestellmethoden

OrderBy(ComparableSelector) - Sortiert die Elemente in aufsteigender Reihenfolge

employees.OrderBy(p => p.Age)

Kann mit weiteren Bestellungen verkettet werden:

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

OrderByDescending(ComparableSelector) - Sortiert Elemente in absteigender Reihenfolge

employees.OrderByDescending(p => p.Age)

Kann mit weiteren Bestellungen verkettet werden:

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

Sammelvorgänge

Concat(IEnumerable) - Verkettet zwei Sammlungen

employees.Concat(otherPersons)

Distinct() - Gibt unterschiedliche Elemente aus einer Sammlung zurück

employees.Distinct()

Union(IEnumerable) - Erzeugt die Vereinigungsmenge zweier Sammlungen

employees.Union(otherPersons)

Where(Predicate) - Filtert Elemente basierend auf einer Bedingung

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

Set Operationen

Skip(int) - Überspringt eine bestimmte Anzahl von Elementen

employees.Skip(10)

SkipWhile(Predicate) - Überspringt Elemente, solange eine Bedingung erfüllt ist

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

Take(int) - Gibt eine bestimmte Anzahl von Elementen zurück

employees.Take(5)

TakeWhile(Predicate) Gibt Elemente zurück, solange eine Bedingung erfüllt ist

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

Transformationsmethoden

Select(Selector) - Projiziert jedes Element in eine neue Form

employees.Select(p => p.Name)

SelectMany(EnumerationSelector) - Projekte und glätten Sammlungen

employees.SelectMany(p => p.Children)

GroupBy(Selector) - Gruppiert Elemente anhand eines bestimmten Schlüssels

employees.GroupBy(p => p.Age)

Kann nach mehreren Eigenschaften gruppiert werden:

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

Praktische Beispiele

Beispiel 1: Filtern und Zählen

Vorlage:

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

Beispiel 2: Bedingte Anzeige

Vorlage:

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

Beispiel 3: Sortierte Listen

Vorlage:

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

Beispiel 4: Gruppierte Daten

Vorlage:

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

Methode Verkettung

Mehrere Aufzählungsmethoden können für komplexe Datenoperationen miteinander verkettet werden:

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

Dieser Ausdruck:

  1. Filtert Mitarbeiter über 25 Jahre
  2. Sortiert sie nach Namen
  3. Nimmt die ersten 10 Ergebnisse
  4. Wählt nur deren Namen aus

Bewährte Verfahren

  1. Prädikate effizient verwenden - Filtern Sie die Daten so früh wie möglich in der Kette
  2. Vermeiden Sie komplexe Ausdrücke. - Komplexe Logik in mehrere Schritte unterteilen
  3. Test mit Beispieldaten - Überprüfen Sie, ob die Aufzählungsmethoden mit Ihrer Datenstruktur funktionieren.
  4. Leere Sammlungen behandeln - Verwenden Any() vor der Verarbeitung von Sammlungen zu prüfen
  5. Leistung optimieren - Minimiere die Aufrufe von Aufzählungsmethoden in Schleifen

:::Tipp zur Leistungsoptimierung Bei der Arbeit mit großen Datensammlungen empfiehlt es sich, die Daten bereits an der Quelle und nicht in der Vorlage zu filtern und einzuschränken, um eine bessere Leistung zu erzielen.

:::