EntitySet vs. Tabellenabfrageleistung in LINQ2SQL

9

In einer LINQ to SQL-Klasse sind dies die Eigenschaften, die aus den Fremdschlüsseln EntitySet objects erstellt werden, die IEnumerable implementieren, wobei die Objekte in DataContext Table -Objekte sind, die% co_de implementieren %?

BEARBEITEN: Hier ist ein Beispiel, das verdeutlicht, was ich zu verstehen versuche. Dieses Beispiel:

%Vor%

trifft die Datenbank zweimal als:

%Vor%

führt nur eine Abfrage aus. Hier sind die Spuren:

%Vor%

und

%Vor%

was auch zeigt, dass, noch schlimmer, das Maximum auf der C # Ebene und nicht in der Datenbank erreicht wird.

Ich weiß, dass der Grund dafür der Unterschied zwischen IQueryable s und IQueryable s ist. Warum also implementiert das IEnumerable -Objekt im ersten Beispiel nicht die MatchPlayers -Schnittstelle, um dieselben Vorteile zu erhalten das letzte Beispiel.

    
thatismatt 14.10.2008, 11:16
quelle

3 Antworten

1

Tabellen sind im Grunde eine konzeptuelle Angelegenheit - sie existieren wirklich auf dem Server, also müssen Sie abfragen, um Einträge zu erhalten. Die Fremdschlüsseleinträge sind diejenigen, die tatsächlich von einer anderen Abfrage abgerufen wurden, so dass sie zu diesem Zeitpunkt lokal verfügbar sind. Das ist eine ziemlich unschöne Beschreibung, aber hoffentlich übertrifft es das allgemeine Konzept.

    
Jon Skeet 14.10.2008, 11:29
quelle
3
%Vor%

Single () gibt ein Match und kein IQueryable (Match) zurück.

Drücken Sie einfach Single () bis zum letzten Schritt:

%Vor%

Diese Abfrage zeigt, dass es in Ordnung ist, die MatchPlayers-Eigenschaft in einer Abfrage zu verwenden. Was meine Interpretation der Frage des Fragestellers angeht - "Warum kann ich ein EntitySet nicht in einer Anfrage verwenden?", Können Sie.

    
Amy B 14.10.2008 15:32
quelle
0

Das war in den MSDN-Foren angesprochen. Der Kern der Argumentation ist, dass es sehr schwierig ist, hinzugefügte und entfernte Objekte zu verfolgen, während Abfragen an die Datenbank gerichtet werden. Stattdessen ist das EntitySet eine Art lokale Kopie der verwandten Objekte, die Sie bearbeiten können. Leider hat dies, wie Sie bemerkt haben, den Nebeneffekt, dass Ausdrücke in LINQ to Objects-Aufrufe statt in die besser funktionierende LINQ to SQL übertragen werden.

    
Jaecen 24.02.2009 18:49
quelle