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