Sie sind auf Seite 1von 83

sew htl krems

Linq - Language Integrated Query


Dipl.-Ing. Msc. Paul Panhofer Bsc.

10. Februar 2021


sew htl krems

1 Linq - grundlegende Konzepte


Linq - Grundlagen
Linq - Klausel
Linq - Datenaggregation

2 Linq - erweiterte Konzepte


Linq - Partitionierung von Daten
Linq - Aggregationsoperatoren
Linq - Gruppieren von Daten
Linq - Mengenoperationen
Linq - Quantifier
Linq - Unterabfragen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


2/83
sew htl krems

Linq - Grundlagen

Linq vereinfacht die Bereitstellung eines konsistenten Mo-


dells zum Arbeiten mit Daten in unterschiedlichen Format-
en.

Linq folgt dabei dem deklarativen Programmierparadig-


ma.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


3/83
sew htl krems

Linq - Grundlagen

Eine Linq Abfrage wird in 3 Schritten verarbeitet:


• 1.Schritt: Datenquelle definieren
• 2.Schritt: Abfrage erstellen
• 3.Schritt: Abfrage ausführen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


4/83
sew htl krems

Linq - Grundlagen
1.Schritt: Datenquelle definieren

Unterstützt eine Datenquelle die IEnumerable Schnittstel-


le, kann diese direkt für Linq Abfragen verwendet werden.

Ist dies nicht der Fall, müssen die Quelldaten zunächst in


den Arbeitsspeicher geladen werden.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


5/83
sew htl krems

Linq - Grundlagen
1.Schritt: Datenquelle definieren

// -- 1.Schritt - Datenquelle definieren


List<Product> products = new List<Product> {
new Product ("Cola", 0),
new Product ("Tea", 0),
new Product ("Apple", 1)
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


6/83
sew htl krems

Linq - Grundlagen
2.Schritt - Abfragen erstellen

Linq Abfragen abstrahieren SQL Abfragen auf Objekt-


ebene.

Die Basis einer Linq Abfrage ist dabei immer eine Menge
von Objekten.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


7/83
sew htl krems

Linq - Grundlagen
2.Schritt - Abfragen erstellen

-- 2.Schritt: Abfrage erstellen


var query = from product in products
join category in categories on
product.CategoryId equals category.Id
select new {
CategoryName = category.CategoryName
Name = product.Name,
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


8/83
sew htl krems

Linq - Grundlagen
3.Schritt - Abfragen ausführen

Linq Abfragen werden von Compiler ausgeführt wenn sie


z.B. in einer foreach Schleife referenziert werden.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


9/83
sew htl krems

Linq - Grundlagen
3.Schritt - Abfragen ausführen

// -- 3.Schritt - Abfrage ausfuehren


foreach (var product in query) {
Console.WriteLine(
"{0}, {1}",
product.Name,
product.CategoryName
);
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


10/83
sew htl krems

1 Linq - grundlegende Konzepte


Linq - Grundlagen
Linq - Klausel
Linq - Datenaggregation

2 Linq - erweiterte Konzepte


Linq - Partitionierung von Daten
Linq - Aggregationsoperatoren
Linq - Gruppieren von Daten
Linq - Mengenoperationen
Linq - Quantifier
Linq - Unterabfragen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


11/83
sew htl krems

Linq - Klausel
Abfragesyntax

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


12/83
sew htl krems

Linq - Klausel: select


Projektion von Daten

Mit der select Klausel kann eine Projektion der Daten


einer Abfrage definiert werden.

Linq unterstützt mehrere Formen von Projektionen.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


13/83
sew htl krems

Linq - Klausel: select


Projektion von Daten

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


14/83
sew htl krems

Linq - Klausel: select


Projektion von Daten

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


15/83
sew htl krems

Linq - Klausel: select


Projektion von Daten

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


16/83
sew htl krems

Linq - Klausel: where


Restriktion von Daten

Zur Filterung der Daten einer Linq Abfrage können in der


where Klausel Bedingungen definiert werden.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


17/83
sew htl krems

Linq - Klausel
Beispiel: where Klausel

IList<Student> studentList = new List<Student>() {


new Student (
StudentID = 1, StudentName = "John", Age = 13
) ,
new Student (
StudentID = 2, StudentName = "Moin", Age = 21
)
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


18/83
sew htl krems

Linq - Klausel: where


Beispiel: where Klausel

-- Geben Sie jene Studenten aus deren Vornamen


-- nicht mehr als 7 Zeichen haben.
var result = from s in stundentList
where s.Length <= 7
select s;

-- Finden Sie alle Schueler im Schulater


var result = from s in studentList
where s.Age > 12 && s.Age <= 18
select s;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


19/83
sew htl krems

Linq - Klausel: where


Beispiel: where Klausel - Delegate

Func<Student,bool> isTeenager =
delegate(Student s) {
return s.Age > 12 && s.Age < 20;
};

-- Finden Sie alle Schueler im Schulater


var filteredResult = from s in studentList
where isTeenager(s)
select s;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


20/83
sew htl krems

Linq - Klausel: from


Datenaggregation

In der from Klausel wird die Datenbasis einer Abfrage


definiert.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


21/83
sew htl krems

Linq - Klausel: from


Datenaggregation

-- Geben Sie fuer alle Studenten den ersten Buch-


-- staben ihres Nachnamens aus.

var result = from s in studentList


select s.StudentName.Substring(0,1);

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


22/83
sew htl krems

Linq - Klausel: orderby


Sortierung

Die orderby Klausel wird zur Sortierung der Elemente einer


Abfage verwendet.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


23/83
sew htl krems

Linq - Klausel: orderby


Sortierung

string[] words = {
"the", "quick", "brown", "fox", "jumps"
};

IEnumerable<string> query = from word in words


orderby word.Length
select word;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


24/83
sew htl krems

Linq - Klausel: orderby


Sortierung: descending

Sollen die Daten einer Abfrage absteigend sortiert


werden, wird das descending Schlüsselwort verwendet.

var query = from word in words


orderby word.Length descending
select word;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


25/83
sew htl krems

1 Linq - grundlegende Konzepte


Linq - Grundlagen
Linq - Klausel
Linq - Datenaggregation

2 Linq - erweiterte Konzepte


Linq - Partitionierung von Daten
Linq - Aggregationsoperatoren
Linq - Gruppieren von Daten
Linq - Mengenoperationen
Linq - Quantifier
Linq - Unterabfragen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


26/83
sew htl krems

Linq - Datenaggregation

In der from Klausel wird die Datenbasis einer Linq Abfrage


definiert. Die Linq Spezifikation unterscheidet dabei
mehrere Joinformen.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


27/83
sew htl krems

Linq - Datenaggregation
Syntax: join

from ... in <outerSequence>


join ... in <innerSequence>
on <outerKey> equals <innerKey>
select ...

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


28/83
sew htl krems

Linq - Datenaggregation
Beispiel: INNER JOIN

// 1.Schritt: Datenquelle definieren


List<Product> products = new List<Product> {
new Product("Apple", 1),
new Product("Cola", 0),
new Product("Tea", 0)
};

List<Category> categories = new List<Category> {


new Category(0, "Beverage"),
new Category(1, "Fruit"),
new Category(2, "Vegetable")
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


29/83
sew htl krems

Linq - Datenaggregation
Beispiel: INNER JOIN

-- Geben Sie fuer Produkte den Produkt- und Kategorie-


-- namen aus.
var result = from p in products
join c in categories
on p.CategoryId equals c.Id
select new {
CategoryName = c.CategoryName,
Name = p.Name
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


30/83
sew htl krems

Linq - Datenaggregation
Beispiel: INNER JOIN - Objektassoziation

// Datenquelle definieren
class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}

class Pet {
public string Name { get; set; }
public Person Owner { get; set; }
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


31/83
sew htl krems

Linq - Datenaggregation
Beispiel: INNER JOIN - Objektassoziation

-- Geben Sie fuer jedes Haustier den Namen des Tiers


-- und den Namen des Besitzers aus.
var query = from p in people
join pet in pets on p equals pet.Owner
select new {
OwnerName = p.FirstName,
PetName = pet.Name
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


32/83
sew htl krems

Linq - Datenaggregation
Beispiel: INNER JOIN - composite key

// composite key: Datenquelle definieren


List<Employee> employees = new List<Employee> {
new Employee (
"Terry", "Adams", 522459
)
}

List<Student> students = new List<Student> {


new Student (
"Vernette", "Price", 9562
)
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


33/83
sew htl krems

Linq - Datenaggregation
Beispiel: INNER JOIN - composite key

-- composite key: Abfrage definieren


var result = from e in employees join
s in students
on new {
e.FirstName, e.LastName
}
equals new {
s.FirstName, s.LastName
}
select e.FirstName + " " + e.LastName;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


34/83
sew htl krems

Linq - Datenaggregation
Beispiel: INNER JOIN - multiple join

// multiple join: Datenquelle definieren


class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}

class Pet {
public string Name { get; set; }
public Person Owner { get; set; }
}

class Cat : Pet { }


class Dog : Pet { }

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


35/83
sew htl krems

Linq - Datenaggregation
Beispiel: INNER JOIN - multiple join
-- multiple join: Abfrage definieren
var query = from p in people
join c in cats on p equals c.Owner
join d in dogs on
new {
Owner=p, Letter=c.Name.Substr(0, 1)
}
equals new {
d.Owner, Letter = d.Name.Substr(0, 1)
}
select new {
CatName = c.Name, DogName = d.Name
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


36/83
sew htl krems

1 Linq - grundlegende Konzepte


Linq - Grundlagen
Linq - Klausel
Linq - Datenaggregation

2 Linq - erweiterte Konzepte


Linq - Partitionierung von Daten
Linq - Aggregationsoperatoren
Linq - Gruppieren von Daten
Linq - Mengenoperationen
Linq - Quantifier
Linq - Unterabfragen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


37/83
sew htl krems

Linq - Partitionierung von Daten

Partitionierungsoperatoren werden verwendet um das


Ergebnis einer Abfrage zu partitionieren.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


38/83
sew htl krems

Linq - Partitionierung von Daten

Partitionierungsoperatoren:
• Skip
• SkipWhile
• Take
• TakeWhile

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


39/83
sew htl krems

Linq - Partitionierung von Daten


Methode: Skip, SkipWhile

Der Skip Operator überspringt die ersten n Elementen


einer Liste.

IEnumerable<string> query = select ... ;


-- Ueberspringen der ersten 5 Elemente einer Liste
query.Skip(5);

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


40/83
sew htl krems

Linq - Partitionierung von Daten


Methode: Skip, SkipWhile

Der SkipWhile Operator überspringt solange Elementen


des Ergebnisses, solange sie eine bestimmte Bedingung
erfüllen.

-- Ueberspringen der ersten 4 Elemente einer Liste


IEnumerable<string> query = {59, 82, 70, 56, 92};
query.SkipWhile(grade => grade >= 80);

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


41/83
sew htl krems

Linq - Partitionierung von Daten


Methode: Take

Der Take Operator gibt die ersten n Elmente einer


Collection als Ergebnis zurück.

IEnumerable<string> query = {59, 82, 70, 56, 92};


-- Liefern Sie die ersten 3 Elemente einer Liste
-- zurueck
query.Take(3);

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


42/83
sew htl krems

1 Linq - grundlegende Konzepte


Linq - Grundlagen
Linq - Klausel
Linq - Datenaggregation

2 Linq - erweiterte Konzepte


Linq - Partitionierung von Daten
Linq - Aggregationsoperatoren
Linq - Gruppieren von Daten
Linq - Mengenoperationen
Linq - Quantifier
Linq - Unterabfragen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


43/83
sew htl krems

Linq - Aggregationsoperatoren

Aggregationsoperatoren werden zur Ausführung von


Operationen auf Gruppen von Daten verwendet.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


44/83
sew htl krems

Linq - Aggregationsoperatoren

Aggregationsoperatoren:
• Min, Max, Average
• Count, Sum
• Aggregate

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


45/83
sew htl krems

Linq - Aggregationsoperatoren
Operatoren: Min, Max, Average

// Berechnen Sie die Summe der Elemente eines Arrays.


var numbers = new int[]{4, 56, 2, 5, 43, 5};
int sum = (from n in numbers).Sum();

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


46/83
sew htl krems

Linq - Aggregationsoperatoren
Operator: Aggregate

// Berechnen Sie die Summe der Elemente eines Arrays.


var numbers = new int[]{4, 5, 3, 9};

int sum = (from n in numbers).Aggregate(


(result, item) => result + item
);

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


47/83
sew htl krems

Linq - Aggregationsoperatoren
Operator: Aggregate

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


48/83
sew htl krems

1 Linq - grundlegende Konzepte


Linq - Grundlagen
Linq - Klausel
Linq - Datenaggregation

2 Linq - erweiterte Konzepte


Linq - Partitionierung von Daten
Linq - Aggregationsoperatoren
Linq - Gruppieren von Daten
Linq - Mengenoperationen
Linq - Quantifier
Linq - Unterabfragen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


49/83
sew htl krems

Linq - Gruppieren von Daten

Die Group Klausel wird zum Gruppieren von Daten ver-


wendet.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


50/83
sew htl krems

Linq - Gruppieren von Daten


Beispiel: group by

List<int> numbers = new List<int>(){


35, 44, 200, 84, 3987, 4, 199, 446
};

-- Gruppieren Sie die Liste von Zahlen in eine Liste


-- von geraden und ungeraden Zahlen
IEnumerable<IGrouping<int, int>> =
from n in numbers group n by n%2;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


51/83
sew htl krems

Linq - Gruppieren von Daten


Beispiel: group by

foreach(var group in query){


Console.WriteLine(
group.Key == 0 ?
"\nEven numbers" : "\nOdd numbers"
);

foreach(int i in group){
Console.WriteLine(i);
}
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


52/83
sew htl krems

Linq - Gruppieren von Daten


Beispiel: Group by

List<Student> student = new List<Student>(){


new Student(
"Terry", "Adams", 120, GradeLevel.SecondYear
),
new Student(
"Fadi", "Fakhouri", 120, GradeLevel.ThirdYear
)
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


53/83
sew htl krems

Linq - Gruppieren von Daten


Group by: GROUP_BY_SINGLE_PROPERTY

var lastNames = from s in students


group s by s.LastName
into newGroup -- gruppierte Daten
orderBy newGroup.Key
select newGroup;

-- Output

-- Group 1: Adams -> Adam


-- Group 2: Fakhouri -> Fadi

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


54/83
sew htl krems

Linq - Gruppieren von Daten


Group by: GROUP_BY_STRING

var groupResults = from s in students


group s by s.LastName[0];

foreach(var studentGroup in groupResults){


foreach(var s in studentGroup){
Console.WriteLine(
$"{s.LastName} {s.FirstName}"
)
}
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


55/83
sew htl krems

Linq - Gruppieren von Daten


Group by: GROUP_BY_COMPOSITE_KEY

from s in students
group s by new {
FirstLetter = s.LastName[0],
Score = s.ExamScore > 85
}
into studentGroup -- gruppierten Daten
orderby studentGroup.Key.FirstLetter
select studentGroup;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


56/83
sew htl krems

Linq - Gruppieren von Daten


Gruppen filtern

from s in students
group s by new {
FirstLetter = s.LastName[0],
Score = s.ExamScored[0] > 85
} into studentGroup
where studentGroup.Count(s) > 3
orderby studentGroup.Key.FirstLetter
select studentGroup;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


57/83
sew htl krems

Linq - Gruppieren von Daten


Operatoren: Min, Max, Average

// Datenbasis definieren
var players = new List<Player>{
new Player("Alex", "A", 10),
new Player("Anna", "A", 20),
new Player("Luke", "L", 60),
new Player("Lucy", "L", 40)
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


58/83
sew htl krems

Linq - Gruppieren von Daten


Operatoren: Min, Max, Average

var scores = from p in players


group p by p.Team into playerGroup
select new {
Team = playerGroup.Key,
TotalScore = playerGroup.Sum(
x => x.Score
)
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


59/83
sew htl krems

1 Linq - grundlegende Konzepte


Linq - Grundlagen
Linq - Klausel
Linq - Datenaggregation

2 Linq - erweiterte Konzepte


Linq - Partitionierung von Daten
Linq - Aggregationsoperatoren
Linq - Gruppieren von Daten
Linq - Mengenoperationen
Linq - Quantifier
Linq - Unterabfragen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


60/83
sew htl krems

Linq - Mengenoperationen

Zur Definition der Datenbasis einer Linq Abfrage koennen


zusätzlich Mengenoperationen verwendet werden.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


61/83
sew htl krems

Linq - Mengenoperationen

Die Linq Spezifikation definiert die folgenden Mengen-


operationen:
• Distinct
• Except
• Intersect
• Union

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


62/83
sew htl krems

Linq - Mengenoperationen
Distinct Methode

Die Distinct Methode entfernt Duplikate aus der Daten-


basis einer Collection.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


63/83
sew htl krems

Linq - Mengenoperationen
Distinct Methode

string[] planets = {
"Mercury", "Venus", "Venus", "Earth", "Mars", "Earth"
};

IEnumerable<string> query = from planet


in planets.Distinct()
select planet;

// Ergebnis: {"Mercury", "Venus", "Earth", "Mars"}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


64/83
sew htl krems

Linq - Mengenoperationen
Except Methode

Die Except Methode berechnet die Differenzmenge


zweier Collections.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


65/83
sew htl krems

Linq - Mengenoperationen
Except Methode

string[] planets1 = {
"Mercury", "Venus", "Earth", "Jupiter"
};
string[] planets2 = {
"Mercury", "Earth", "Mars", "Jupiter"
};

IEnumerable<string> query = from planet in


planets1.Except(planets2)
select planet;

// Ergebnis: {"Venus"}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


66/83
sew htl krems

Linq - Mengenoperationen
Intersect Methode

Die Intersect Methode berechnet die Durchschnitts-


menge zweier Collections.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


67/83
sew htl krems

Linq - Mengenoperationen
Intersect Methode

string[] planets1 = {
"Mercury", "Venus", "Earth", "Jupiter"
};
string[] planets2 = {
"Mercury", "Earth", "Mars", "Jupiter"
};

IEnumerable<string> query = from planet in


planets1.Intersect(planets2)
select planet;

// Ergebnis: {"Mercury", "Earth", "Jupiter"}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


68/83
sew htl krems

Linq - Mengenoperationen
Union Methode

Die Union Methode berechnet die Vereinigungsmenge


zweier Collections.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


69/83
sew htl krems

Linq - Mengenoperationen
Union Methode
string[] planets1 = {
"Mercury", "Venus", "Earth", "Jupiter"
};
string[] planets2 = {
"Mercury", "Earth", "Mars", "Jupiter"
};

IEnumerable<string> query = from planet in


planets1.Union(planets2)
select planet;

Ergebnis: {
"Mercury", "Venus", "Earth", "Jupiter", "Mars"
}
Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021
70/83
sew htl krems

1 Linq - grundlegende Konzepte


Linq - Grundlagen
Linq - Klausel
Linq - Datenaggregation

2 Linq - erweiterte Konzepte


Linq - Partitionierung von Daten
Linq - Aggregationsoperatoren
Linq - Gruppieren von Daten
Linq - Mengenoperationen
Linq - Quantifier
Linq - Unterabfragen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


71/83
sew htl krems

Linq - Quantifier

Quantifier sind Operatoren die eine Collection von Wer-


ten klassifizieren. Der Rückgabewert eines Quanitfiers ist
ein Bool Wert.

Quantifer Operatoren:
• All
• Any
• Contains

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


72/83
sew htl krems

Linq - Quantifier
All Quantifier

Der All Quantifier prüft, ob alle Elemente einer Menge


eine bestimmte Bedingung erfüllen.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


73/83
sew htl krems

Linq - Quantifier
All Quantifier: Beispiel

List<Market> markets = new List<Market>{


new Market {
Name = "Emiliy",
Items = new string[]{"kiwi", "cheery", "banana"}
},
new Market (
Name = "Kim",
Items = new string[]{"melon", "mango", "olive"}
}
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


74/83
sew htl krems

Linq - Quantifier
All Quantifier: Beispiel

-- Welcher Markt verkauft nur Fruechte deren Namen


-- laenger sind als 5 Zeichen.
from m in markets
where m.Items.All(item => item.Length == 5)
select m.Name;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


75/83
sew htl krems

Linq - Quantifier
Any Quantifier

Der Any Quantifier prüft, ob mindestens ein Element einer


Liste eine bestimmte Bedingung erfüllt.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


76/83
sew htl krems

Linq - Quantifier
All Quantifier: Beispiel

-- Welcher Markt verkauft mindestens eine Fruechtart


-- deren Name mit o beginnt.
from m in markets
where m.Items.Any(item => item.StartsWith("o"))
select m.Name;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


77/83
sew htl krems

Linq - Quantifier
Contains Quantifier

Der Contains Quantifier prüft ob ein bestimmtes Element


in einer Liste von Werten enthalten ist.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


78/83
sew htl krems

Linq - Quantifier
All Quantifier: Beispiel

-- Welcher Markt verkauft mindestens eine Fruechtart


-- deren Name mit o beginnt.
from m in markets
where m.Items.Contains("kiwi")
select m.Name;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


79/83
sew htl krems

1 Linq - grundlegende Konzepte


Linq - Grundlagen
Linq - Klausel
Linq - Datenaggregation

2 Linq - erweiterte Konzepte


Linq - Partitionierung von Daten
Linq - Aggregationsoperatoren
Linq - Gruppieren von Daten
Linq - Mengenoperationen
Linq - Quantifier
Linq - Unterabfragen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


80/83
sew htl krems

Linq - Unterabfragen

Unterabfragen sind Abfragen die in andere Abfragen


eingebettet werden.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


81/83
sew htl krems

Linq - Unterabfragen

// Datenbasis definieren
var players = new List<Player>{
new Player("Alex", "A", 10),
new Player("Anna", "A", 20),
new Player("Luke", "L", 60),
new Player("Lucy", "L", 40)
};

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


82/83
sew htl krems

Linq - Unterabfragen

// Welche Spieler haben die meisten Punkte erreicht?


var result = from p in players
where p.Points ==
(from p1.Points in players).Max()
select p;

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 10. Februar 2021


83/83