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:
Wenn ich jedoch die gesamte Tabelle in den Speicher bringe, z. B. den Aufruf von AsEnumerable()
,
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?
Tags und Links sql-server c# linq linq-to-sql