Warum verursacht diese Kombination von Select, Where und GroupBy eine Ausnahme?

8

Ich habe eine einfache Tabellenstruktur von Diensten mit jeweils einer Reihe von Einrichtungen. In der Datenbank ist dies eine Service -Tabelle und eine Facility -Tabelle, wobei die Facility -Tabelle einen Verweis auf eine Zeile in der Service-Tabelle hat.

In unserer Anwendung haben wir die folgende LINQ-Funktion:

%Vor%

Aber aus Gründen, die ich nicht kontrollieren kann, wird der Quellsatz vor dem Aufruf von Where auf ein Nicht-Entitätsobjekt projiziert:

%Vor%

Aber das löst die folgende Ausnahme ohne innere Ausnahme aus:

EntityCommandCompilationException: The nested query is not supported. Operation1='GroupBy' Operation2='MultiStreamNest'

Durch das Entfernen von Where funktioniert es jedoch, was mich glauben lässt, dass es nur in dieser spezifischen Kombination von Methodenaufrufen ist:

%Vor%

Gibt es eine Möglichkeit, die obige Aufgabe zu erfüllen: Wählen Sie ein Nicht-Entitätsobjekt aus, und verwenden Sie dann Where und GroupBy auf dem resultierenden abfragbaren Objekt? Hinzufügen von ToList nach dem Select funktioniert, aber die große Quellenmenge macht dies undurchführbar (es würde die Abfrage in der Datenbank ausführen und dann die Gruppierungslogik in C # erstellen).

    
Steve Klösters 26.11.2014, 15:10
quelle

1 Antwort

11

Diese Ausnahme stammt von diesem Code in der EF-Quelle ...

%Vor%

Ich muss zugeben: Es ist nicht offensichtlich, was hier passiert, und es gibt kein technisches Designdokument, das alle Strategien von EF zum Erstellen von Abfragen offenlegt. Aber dieses Stück Code ...

%Vor%

Gibt einen kleinen Blick hinter die Vorhänge. Ich habe gerade einen OrderBy in einem Fall von meinem eigenen versucht, der genau dein reproduziert, und es hat funktioniert. Also ich bin mir ziemlich sicher, wenn du es tust ...

%Vor%

Die Ausnahme wird weg sein.

    
Gert Arnold 29.11.2014, 20:07
quelle