LINQ: Quantifizierungs- und Elementaroperatoren

In einem vorhergehenden Artikel habe ich Ihnen bereits einige LINQ Operatoren vorgestellt. Darauf aufbauend möchte ich Ihnen weitere Operatoren näher bringen.

 
Übersicht

In diesem Artikel werden die folgenden LINQ Funktionen vorgestellt:

Quantifizierungsoperatoren

  • Any
  • Any mit Prädikat
  • All

Elementaroperatoren

  • First
  • Last
  • First mit Prädikat
  • Last mit Prädikat
  • FirstOrDefault
  • LastOrDefault
  • Single
  • SingleOrDefault
  • ElementAt
  • ElementAtOrDefault
  • DefaultIfEmpty

 
Quantifizierungsoperatoren

Any

 

Prüft ob eine Liste werte enthält

 

Any mit Prädikat

 

Prüft ob eine Liste einen bestimmten Wert enthält, beziehungsweise ob ein Wert eine bestimmte Bedingung erfüllt.

 

All

 

Prüft ob alle Elemente der liste die Bedingung erfüllen.

 

 
Das nachfolgende Beispiel zeigt diese Operatoren. Die jeweiligen Ergebnisse sind als Kommentar im Quellcode angegeben.

    1 List<string> values = new List<string>() { "John", "Jim", "Sarah"};

    2 

    3 //true

    4 bool resultAny1 = (from value in values

    5                    where value == "John"

    6                    select value).Any();

    7 

    8 //false

    9 bool resultAny2 = (from value in values

   10                    where value == "Tom"

   11                    select value).Any();

   12 

   13 //true

   14 bool resultAny3 = values.Any(c => c == "John");

   15 

   16 //false

   17 bool resultAny4 = values.Any(c => c == "Tom");

   18 

   19 //true

   20 bool resultAll1 = values.All(c => c.Length > 2);

   21 

   22 //false

   23 bool resultAll2 = values.All(c => c.Length > 3);

 

 
Elementaroperatoren

First / Last ohne Prädikat Gibt das erste bzw. letzte Element der Ergebnisliste zurück. Ist die Liste leer wird eine InvalidOperationException geworfen.

 

First / Last mit Prädikat Gibt das erste bzw. letzte Element der Ergebnisliste zurück welches dem angegebenen Prädikat entspricht. Ist die Liste leer oder enthält kein mit dem Prädikat übereinstimmendes Element wird eine InvalidOperationException geworfen.

 

FirstOrDefault / LastOrDefault

(mit und ohne Prädikat)

Gibt das erste bzw. letzte Element der Ergebnisliste. Wie zuvor kann eine Angabe mit oder ohne Prädikat erfolgen.

Wird kein Element gefunden wird aber keine InvalidOperationException geworfen sondern der defaut Wert des Typs zurück gegeben, beispielsweise null bei einem string.

 

Single Dient zum Auffinden eines eindeutigen Elements. Entsprechen mehrere Elemente in der Liste dem Prädikat wird eine InvalidOperationException geworfen

 

SingleOrDefault Dient zum Auffinden eines eindeutigen Elements. Wird kein Element gefunden wird keine InvalidOperationException geworfen sondern der defaut Wert des Typs zurück gegeben, beispielsweise null bei einem string.

 

ElementAt

 

Gibt ein Element aus der Liste anhand des index zurück (0 basiert). Liegt die Position nicht innerhalb der Liste wird eine InvalidOperationException geworfen.

 

ElementAtOrDefault

 

Gibt ein Element aus der Liste anhand des index zurück (0 basiert). Liegt die Position nicht innerhalb der Liste wird der default Wert des Typs zurück gegeben und keine InvalidOperationException geworfen.

 

DefaultIfEmpty

 

Prüft ob die Ergebnisliste leer ist und gibt in diesem Fall den angegebenen Wert zurück.

 

 

Das nachfolgende Beispiel zeigt diese Operatoren.

    1 List<string> values = new List<string>() { "John", "Jim", "Sarah"};

    2 

    3 //John

    4 var resultFirst = values.First();

    5 

    6 //Sarah

    7 var resultLast= values.Last();

    8 

    9 //Jim

   10 var resultFirstPredicate = values.First(n => n.Length == 3);

   11 

   12 //Jim

   13 var resultSingle = values.Single(n => n.Length == 3);

   14 

   15 //Sarah

   16 var resultElementAt = values.ElementAt(2);

   17 

   18 //null

   19 var resultFirstOrDefault = values.FirstOrDefault(n => n.Length == 7);

   20 

   21 //Liste mit einem Element mit dem Wert ’not found‘

   22 var resultDefaultIfEmpty = (from value in values

   23                             where value.Length == 8

   24                             select value).DefaultIfEmpty("not found");

 
Fazit

Die hier vorgestellten Operatoren für LINQ Abfragen stellen praxisrelevante Möglichkeiten für Datenabfragen dar. Mittels dieser LINQ Operatoren entfallen die sonst nötigen (verschachtelten) Schleifen welche sich andernfalls bei der Datenauswertung ergeben würden. Dadurch lässt sich besser lesbarer Quellcode erzeugen.

Werbung
Dieser Beitrag wurde unter .NET, C#, LINQ abgelegt und mit , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit deinem WordPress.com-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s