Warum übersetzt LINQ to SQL GroupBy in mehrere Abfragen?

9

Ich habe bemerkt, dass sogar meine einfacheren LINQ-Abfragen, die GroupBy verwenden, in so viele SQL-Abfragen wie Gruppenschlüssel übersetzt werden. Ich habe keine Erklärung dafür gefunden, warum dies geschieht oder wie ich es vermeiden kann.

Zum Beispiel die Abfrage:

%Vor%

wird in so viele selects wie verschiedene Werte für die Spalte Name übersetzt, genau wie diese:

%Vor%

Wenn ich jedoch die gesamte Tabelle in den Speicher bringe, z. B. den Aufruf von AsEnumerable() ,

%Vor%

Es wird nur eine einzige Auswahl ausgegeben, die alle Zeilen abruft, und dann führt LINQ die Gruppierung im Speicher durch.

Ich finde dieses Verhalten eher verwirrend und fehleranfällig, da ich oft komplexe Abfragen in verschiedenen Anweisungen verfasse und vorsichtig genug sein muss, um AsEnumerable oder ToList aufzurufen, bevor eine GroupBy ausgeführt wird oder meine Leistung beeinträchtigt wird . Schlimmer noch, es zwingt mich, meine LINQ to SQL -Abfrage zu beenden und mit LINQ to Objects fortzufahren.

Ich habe das sowohl mit LINQ to Entities als auch mit LINQ to SQL (bis LINQPad ) getestet, wobei das DBMS SQL Server ist.

Vermisse ich etwas? Ist dies von Entwurf oder gibt es eine Möglichkeit, die LINQ-Abfrage so zu schreiben, dass SQL GROUP BY anstelle mehrerer einzelner erzeugter Abfragen verwendet wird?

    
jnovo 02.04.2014, 15:45
quelle

1 Antwort

2

Sie müssen Ihre SELECT-Anweisung ändern, damit sie SQL-freundlicher ist.

ändern: select g

zu etwas wie diesem:

%Vor%     
Aducci 02.04.2014 17:21
quelle

Tags und Links