Entity Framework - Union verursacht "Es konnte kein konstanter Wert vom Typ .." erstellt werden.

8

Um alle Scheduling s auszuwählen, die aktiv sind, habe ich den folgenden Code:

%Vor%

( Factory ist ein int )

Wenn ich diesen Code ausführe, bekomme ich diesen kryptischen Fehler in der foreach -Zeile:

  

Es konnte kein konstanter Wert vom Typ 'System.Collections.Generic.IEnumerable' 1 'erstellt werden. Nur primitive Typen ('wie Int32, String und Guid') werden in diesem Kontext unterstützt.

Seltsamerweise kann ich sowohl allSchedulesOnALine als auch allSchedulesUnscheduled separat aufzählen. Noch seltsamer, wenn ich die Gewerkschaft neu anordne:

%Vor%

Es funktioniert gut!

Hat jemand eine Idee, warum das passieren würde? Fehle ich etwas Entscheidendes oder ist das ein Fehler?

Ich sollte erwähnen, dass ich Entity Framework 3.5 verwende. EF4 ist für uns derzeit keine Option - es liegt außerhalb meiner Kontrolle: \

    
BlueRaja - Danny Pflughoeft 10.05.2011, 21:42
quelle

1 Antwort

12

Sie rufen zwei verschiedene Methoden mit Ihrer "Neuordnung" auf.

Sie zeigen nicht die Arten von allSchedulesOnALine oder allSchedulesUnscheduled an, aber ich wette, dass allSchedulesOnALine vom Typ IEnumerable<Schedule> und allSchedulesUnscheduled vom Typ IQueryable<Schedule> ist.

Wenn Sie also Queryable.Union aufrufen, bitten Sie den EF, das zu übersetzen Ausdruck in SQL. Das übergebene Argument hat jedoch den Typ IEnumerable<Schedule> und kann das nicht in eine Abfrage übersetzen.

Auf der anderen Seite, wenn Sie Enumerable.Union aufrufen , Sie bitten LINQ an Objekte, die ganze Sache im Speicher zu tun, was gut funktioniert, wenn auch vielleicht langsamer.

Der Grund dafür ist, dass Sie zwei völlig verschiedene Methoden aufrufen, die verschiedene Dinge tun, aber zufällig denselben Namen haben. Nein, es ist kein Fehler.

    
Craig Stuntz 11.05.2011, 13:08
quelle