Ich versuche, dynamischen Datenkontext zu erstellen, linq unterstützt keinen dynamischen Typ Ich habe diese Lösung auf
gefunden %Vor%Das Problem mit dieser Lösung besteht darin, alle Daten aus der Datenbank abzurufen, nachdem die where-Anweisung angewendet wurde. Gibt es eine Möglichkeit, eine where-Anweisung anzuwenden, bevor die Daten aus der Datenbank mit dem dynamischen Typ
abgerufen werdenDas Problem mit dieser Lösung besteht darin, alle Daten aus der Datenbank abzurufen, nachdem die where-Anweisung angewendet wurde.
Das Problem hier ist nicht mit der Dynamik, sondern mit der Art, wie Sie über die Quelle iterieren. Sie verwenden foreach
und erwarten, dass es in eine SQL oder eine Art von übersetzt wird, aber das ist nur eine falsche Annahme. Sobald der Iterator vom GetEnumerator()
-Methodenaufruf erstellt wurde, wird die Abfrage "materialisiert", auch wenn der reale Typ von source
IQueryable<T>
implementiert, wird alles andere im Speicher ausgeführt.
Wenn Sie möchten, dass die Bedingungen in SQL übersetzt werden, brauchen Sie um IQueryableProvider zu implementieren .
Oder zumindest können Sie versuchen, den zugrunde liegenden IQueryableProvider
aufzurufen. Aber ich bin mir nicht sicher, ob es funktionieren würde.
Bitte beachten Sie, dass sich der Typ des Parameters source
von object
zu IQueryable
geändert hat und die Typen der Parameter map
und predicate
in Expression<Func<,>>
geändert wurden.