LINQ: Set- Generierungs- und Aufteilungsoperatoren

In einem früheren Artikel habe ich Ihnen einen Crashkurs in LINQ gegeben. Aufbauend auf diesem Artikel möchte ich Ihnen weitere nützliche LINQ Funktionen vorstellen.

 
Übersicht

In diesem Artikel werden die folgenden LINQ Funktionen vorgestellt:

Set Operatoren

  • Distinct
  • Except
  • Union
  • Intersect

Generierungsoperatoren

  • Enumerable.Range
  • Enumerable.Repeat

Aufteilungsoperatoren

  • Take
  • TakeWhile
  • Skip
  • SkipWhile

 
Set Operatoren

Distinct

 

Entfernt sich wiederholende Elemente so dass jedes Element nur einfach vorkommt.

 

Except

 

Entfernt die Elemente aus der Ergebnisliste welche in der Filterliste angegeben sind.  Ausserdem werden doppelte Einträge entfernt, also indirekt ein zusätzliches Distinct durchgeführt.

 

Union

 

Verbindet zwei Listen miteinander indem alle Elemente aus beiden Listen verwendet werden. Aus der erstellten Gesamtmenge werden die doppelten Einträge entfernt.

 

Intersect

 

Verbindet zwei Listen miteinander indem die Schnittmenge gebildet wird. Das heisst, es werden nur die Elemente verwendet die in beiden Listen vorkommen. Auch hier werden doppelte Einträge entfernt.

 

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

    1 List<string> valuesA = new List<string>() { "A", "A", "B", "B", "C" };

    2 List<string> valuesB = new List<string>() { "A", "C", "E" };

    3 

    4 //A B C

    5 var resultsDistinct = valuesA.Distinct();

    6 

    7 //B

    8 var resultsExcept = valuesA.Except(valuesB);

    9 

   10 //A B C E

   11 var resultsUnion = valuesA.Union(valuesB);

   12 

   13 //A C

   14 var resultsIntersect = valuesA.Intersect(valuesB);

 
Generierungsoperatoren

Enumerable.Range

 

Erzeugt eine definierbare Anzahl von integer Werten ausgehend vom angegeben Startwert.

 

Enumerable.Repeat

 

Vervielfacht die Werte einer Liste.

 

 

Das nachfolgende Beispiel zeigt die Verwendung der Generierungsoperatoren.

    1 List<string> values = new List<string>() { "A", "B", "C" };

    2 

    3 //10 11 12 13 14

    4 var resultsRange = Enumerable.Range(10, 5);    

    5 

    6 //A B C A B C A B C

    7 var resultsRepeat = Enumerable.Repeat(values, 3).SelectMany(x => x);

 
Aufteilungsoperatoren

Take

 

Holt die ersten x Elemente aus der Wertmenge.

 

TakeWhile

 

Holt die Elemente so lange aus der Wertmenge bis das angegebene Prädikat false ergibt oder die Werte durchlaufen wurden.

 

Skip

 

Überspringt die ersten x Elemente der Wertmenge.

 

SkipWhile

 

Überspringt die Elemente so lange wie das Ergebnis des Prädikats true ist. Sobald das Prädikat false ergibt, werden das Element und alle folgenden Elemente in die Ergebnisliste übernommen.

 

 
Das nachfolgende Beispiel zeigt die Verwendung der Aufteilungsoperatoren.

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

    2 

    3 //John Jim

    4 var resultsTake = values.Take(2);

    5 

    6 //John

    7 var resultsTakeWhile = values.TakeWhile(n => n.Length > 3);

    8 

    9 //Sarah

   10 var resultsSkip = values.Skip(2);

   11 

   12 //Jim Sarah

   13 var resultsSkipWhile = values.SkipWhile(n => n.Length > 3);

 
Fazit

LINQ bietet viele Operatoren welche ein effizientes Auswerten von Datenmengen erlauben. Als Softwareentwickler sollte man diese kennen und anwenden. Diese Artikelserie werde ich daher fortsetzen und Ihnen weitere LINQ Operatoren und LINQ Features vorstellen.

Advertisements
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 )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

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

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s