LINQ-to-Entities (L2E)
Eintrag zuletzt aktualisiert am: 15.02.2011
LINQ-to-Entities ist die LINQ-Variante für den Zugriff auf Modelle, die mit den
ADO.NET Entity Framework Objectservices erstellt wurden. LINQ-to-Entities ist sehr ähnlich zu der LINQ-Syntax in
LINQ-to-SQL.
LINQ-to-Entities wandelt LINQ-Befehle in datenbankspezifische SQL-Syntax (z.B. T-SQL für
Microsoft SQL Server oder
PL/SQL für
Oracle) um.
Es gilt aber: LINQ-to-Entities ist nur die Abfragesprache im engeren Sinne, während
LINQ-to-SQL als Begriff sowohl die Abfragesprache als auch das
ORM-Werkzeug bezeichnet.
Beispiel 1 für LINQ-to-Entities
Das folgende Beispiel zeigt eine LINQ to Entities-Abfrage aller Flüge von einem Abflugort, die mindes-tens einen Passagier haben und auf denen mindestens ein Passagier mit einem bestimmten Nachnamen gebucht ist. Für diese Abfrage werden also schon die Beziehungen zwischen den Entitäten ausgenutzt. Das Entity Framework erzeugt automatisch einen SQL-Befehl mit den notwendigen Joins über die vier Tabellen Flug, Flug_Passagier, Passagier und Person.
String ort = "Rom";
string name = "Müller";
from f in modell.Flug
where f.Abflugort == ort && f.Passagier.Count > 0 &&
f.Passagier.Any(p => p.Person.Name == name)
select f;
Beispiel 2 für LINQ-to-Entities
Besonders eindrucksvoll wird die Prägnanz von LINQ to Entities gegenüber SQL beim Einsatz von Pa-ging.
Paging bedeutet, dass aus einer Ergebnismenge nur ein bestimmter Teilbereich geliefert werden soll, z. B. Datensätze 20 bis 29. Dies realisiert man in LINQ to Entities wie in LINQ to Objects mit den Metho-den Skip() und Take() (bzw. den Sprachelementen Skip und Take in
Visual Basic .NET). Verglichen mit dem umfangreichen SQL-Code, den man normalerweise dafür schreiben muss, ist LINQ to Entities hier eine Revolution!
string ort1 = "Frankfurt";
string ort2 = "München";
string ort3 = "Berlin";
int von = 20;
int anzahl = 10;
var fluege = (from f in modell.Flug
where f.Abflugort == ort1 || f.Abflugort == ort2 || f.Abflugort == ort3
orderby f.FlugNr
select f).Skip(von).Take(anzahl);