Zum Hauptinhalt springen

Linq

Einstieg

Mit Linq kann ähnlich, wie in SQL direkt aus dem C#-Code Abfrage erstellt werden.

public class Person
{
public string Firstname { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
}

internal class Linq
{
public static void Run()
{
List<Person> persons = new List<Person>()
{
new Person { Firstname = "Max", Surname = "Mustermann", Age = 28 },
new Person { Firstname = "Maria", Surname = "Schulze", Age = 32 },
new Person { Firstname = "Hans", Surname = "Müller", Age = 45 },
new Person { Firstname = "Anna", Surname = "Fischer", Age = 21 },
new Person { Firstname = "Klaus", Surname = "Schmidt", Age = 39 },
new Person { Firstname = "Julia", Surname = "Weber", Age = 27 },
new Person { Firstname = "Peter", Surname = "Koch", Age = 57 },
new Person { Firstname = "Sabine", Surname = "Schneider", Age = 41 },
new Person { Firstname = "Tom", Surname = "Meyer", Age = 18 },
new Person { Firstname = "Sandra", Surname = "Wagner", Age = 29 },
new Person { Firstname = "Fritz", Surname = "Bauer", Age = 63 },
new Person { Firstname = "Lisa", Surname = "Hoffmann", Age = 36 },
new Person { Firstname = "Johannes", Surname = "Becker", Age = 42 },
new Person { Firstname = "Marie", Surname = "Lange", Age = 25 },
new Person { Firstname = "Tim", Surname = "Schultz", Age = 47 }
};


var query = from p in persons
where p.Age > 30
select p;

foreach (var person in query)
{
Console.WriteLine($"In der Liste ist {person.Firstname} {person.Surname} mit dem Alter von {person.Age} älter als 30.");
}

Console.WriteLine("***************************************");

// alternative Schreibweise

var query2 = persons
.Where(p => p.Age > 30)
.Select(p => p);

foreach (var person in query2)
{
Console.WriteLine($"In der Liste ist {person.Firstname} {person.Surname} mit dem Alter von {person.Age} älter als 30.");
}
}
}

Es ist egal wohler die Daten von Linq-Abfragen stammen, sie müssen nur die Schnittstelle Enumberable<t> implementieren.

Cachen der Daten

Linq Abfrage werden erst ausgeführt, wenn sie benötigt werden. Im oberen Beispiel also erst, wenn die foreach ausgeführt wird. Bei einem erneuten Aufruf wird Abfrage erneut berechnet. Sollten die Daten gecacht werden, soll man sie in eine Liste oder in Dictionary speichern.


Kommentare