Es konnte kein konstanter Wert vom Typ 'Anonymer Typ' erstellt werden. In diesem Kontext werden nur primitive Typen oder Aufzählungstypen unterstützt

8

Ich bin extrem neu in linq und Entity Framework. Ich versuche ein Problem zu lösen, warum das Folgende nicht funktioniert. Der Fehler, der erzeugt wird, ist "Konnte keinen konstanten Wert vom Typ 'Anonymer Typ' erstellen. In diesem Kontext werden nur primitive Typen oder Aufzählungstypen unterstützt."

Ich habe so viele verschiedene Möglichkeiten ausprobiert, aber immer noch einen Fehler in Bezug auf primitive Typen bekommen. Ich würde es sehr schätzen, wenn jemand den unten stehenden Code ansehen und hoffentlich darauf hinweisen könnte, wo es schief geht.

%Vor%

AKTUALISIEREN

Ich habe jetzt einen anderen Ansatz gewählt, indem ich eine Ansicht erstellt habe, sodass ich die Cross-Context-Joins in EF nicht mehr machen muss. Ich habe gehofft, dass Sie mit dem Folgenden helfen können.

Wenn ich objectQuery.ToTraceString () ausfühle, liefert es mir gültiges SQL, das Datensätze in der db zurückgibt, aber das resLst in EntityFramework kommt immer mit 0 zurück. Ist etwas offensichtlich, warum dies geschieht?

%Vor%     
JIbber4568 02.08.2013, 09:49
quelle

1 Antwort

5

Das Problem ist der Aufruf von ToList () für Details. In EF können Sie nur auf IEnumerable innerhalb einer Abfrage verweisen, wenn IEnumerable von einem einfachen Typ ist (z. B. int). Sie können sich jedoch auf ein anderes IQueryable beziehen. Wenn Sie also den Aufruf von ToList () löschen, sollte dies funktionieren.

BEARBEITEN: In ähnlicher Weise sollten Sie den Aufruf von ToList () auf ctx.CompanySettings löschen.

Dies hat den zusätzlichen Vorteil, dass nur eine Abfrage anstelle von 2 ausgeführt wird. Wenn Sie die ToList () -Option für Details löschen, erzeugt EF etwas wie:

%Vor%

BEARBEITEN: Um dies über verschiedene Kontexte hinweg zu tun, müssen Sie die Abfrage in den Speicher bringen (zB indem Sie AsEnumerable () aufrufen und dort die relevanten Joins ausführen. Wenn die Joins als Filter fungieren und es wichtig ist, dass diese in SQL passieren , Überlegen Sie sich, Contains () zu verwenden, zum Beispiel

%Vor%     
ChaseMedallion 02.08.2013 09:50
quelle