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.