Ich arbeite jetzt schon eine ganze Weile mit LINQ. Es bleibt jedoch ein Rätsel, welche wirklichen Unterschiede zwischen den genannten Geschmacksrichtungen von LINQ bestehen.
Die erfolgreiche Antwort enthält eine kurze Unterscheidung zwischen ihnen. Was ist das Hauptziel jedes Geschmacks, was ist der Nutzen und gibt es eine Auswirkung auf die Leistung ...
PS Ich weiß, dass es viele Informationsquellen gibt, aber ich suche nach einer Art "Spickzettel", der einen Neuling anweist, wohin er zu einem bestimmten Ziel gehen soll.
Antworten:
Alle von ihnen sind LINQ - Language Integrated Query - daher haben sie alle viele Gemeinsamkeiten. Mit all diesen "Dialekten" können Sie grundsätzlich Daten aus verschiedenen Quellen im Abfragestil auswählen.
Linq-to-SQL ist der erste Versuch von Microsoft, einen ORM - Object-Relational Mapper zu erstellen. Es wird nur SQL Server unterstützt. Es ist eine Zuordnungstechnologie zum Zuordnen von SQL Server-Datenbanktabellen zu .NET-Objekten.
Linq-to-Entities ist die gleiche Idee, verwendet jedoch Entity Framework im Hintergrund als ORM - ebenfalls von Microsoft, unterstützt jedoch mehrere Datenbank-Backends
Linq-to-DataSets ist LINQ, aber die Verwendung widerspricht den ADO.NET 2.0-DataSets im "alten Stil". In der Zeit vor ORMs von Microsoft konnten Sie mit ADO.NET lediglich DataSets, DataTables usw. und Linq zurückgeben -to-DataSets fragt diese Datenspeicher nach Daten ab. In diesem Fall würden Sie also eine DataTable oder DataSets (System.Data-Namespace) aus einem Datenbank-Backend zurückgeben und diese dann mithilfe der LINQ-Syntax abfragen
quelle
LINQ ist eine breite Palette von Technologien, die beispielsweise auf einer Syntax für das Abfrageverständnis basieren, zum Beispiel:
welches vom Compiler in Code abgebildet wird:
und hier beginnt die wahre Magie. Beachten Sie, dass wir nicht gesagt haben, was
Foo
hier ist - und der Compiler ist das egal! Solange es lösen kann einige genannt geeignete Verfahren ,Where
dass eine Lambda nehmen, und das Ergebnis davon hat eineSelect
Methode, die das Lambda akzeptieren kann, ist es glücklich.Stellen Sie sich nun vor, dass das Lambda entweder in eine anonyme Methode (Delegat für LINQ-to-Objects, einschließlich LINQ-to-DataSet) oder in einen Ausdrucksbaum (ein Laufzeitmodell, das das Lambda in einem Objektmodell darstellt ) kompiliert werden kann ).
Bei speicherinternen Daten wird (normalerweise
IEnumerable<T>
) nur der Delegat ausgeführt - gut und schnell. FürIQueryable<T>
die Objektdarstellung des Ausdrucks (aLambdaExpression<...>
) kann er jedoch auseinandergezogen und auf ein beliebiges "LINQ-to-Something" -Beispiel angewendet werden.Für Datenbanken (LINQ-to-SQL, LINQ-to-Entities) kann dies das Schreiben von TSQL bedeuten, zum Beispiel:
Dies kann jedoch (z. B. für ADO.NET Data Services) das Schreiben einer HTTP-Abfrage bedeuten.
Das Ausführen einer gut geschriebenen TSQL-Abfrage, die eine kleine Datenmenge zurückgibt, ist schneller als das Laden einer gesamten Datenbank über das Netzwerk und das anschließende Filtern auf dem Client. Beide haben jedoch ideale Szenarien und einfach falsche Szenarien.
Ziel und Vorteil besteht darin, dass Sie eine einzige statisch überprüfte Syntax verwenden können, um eine Vielzahl von Datenquellen abzufragen und den Code aussagekräftiger zu gestalten ("traditioneller" Code zum Gruppieren von Daten beispielsweise nicht sehr klar in Bezug auf das, was es zu tun versucht - es geht in der Masse des Codes verloren).
quelle
LINQ steht für sprachintegrierte Abfrage. Sie können die Abfragesprache "SQL-Stil" direkt in C # verwenden, um Informationen aus Datenquellen zu extrahieren.
Diese Datenquelle könnte auch eine XML-Datei sein - Linq to XML .
Oder auch nur eine Collection-Klasse von einfachen Objekten - Linq to Objects .
LINQ beschreibt die Abfragetechnologie, der Rest des Namens beschreibt die Quelle der abgefragten Daten.
Für ein bisschen zusätzlichen Hintergrund:
Datensammlungen sind ADO.net Objekte , bei denen Daten aus einer Datenbank in eine .NET - Dataset und Linq verwendet werden können , um Abfrage geladen wird , dass die Daten , nachdem es geladen.
Mit Linq to SQL definieren Sie .net-Klassen, die der Datenbank zugeordnet sind, und Linq-to-SQL übernimmt das Laden der Daten aus der SQL Server-Datenbank
Und schließlich ist das Entity Framework ein System, in dem Sie eine Datenbank- und Objektzuordnung in XML definieren und dann mit Linq die Daten abfragen können, die über diese Zuordnung geladen werden.
quelle