IQereryable zur Liste

8

Ich benutze System.Linq.Dynamic , um eine Liste dynamisch auswählen zu können Felder aus einer Abfrage wie folgt:

%Vor%

Wo selectors nur ein List<string> mit allen Feldern ist, die ich möchte. Das funktioniert großartig, aber diese Version der Erweiterungsmethode Select gibt IQueryable zurück. Nicht das ist nicht IQueryable<T> . Wenn ich ein IQueryable<T> habe, kann ich einfach ein .ToList() machen, um es in eine Liste umzuwandeln und die Abfrage zu zwingen, tatsächlich auf der Datenbank zu laufen, aber mit der nicht-generischen IQueryable , diese Methode existiert nicht.

Dies liegt daran, dass ToList von IEnumerable<T> geerbt wird, was IQueryable<T> erbt und IQueryable , offensichtlich nicht.

Also, was ist der effizienteste Weg, um ein IQueryable zu erhalten, um die Abfrage auszuführen und mir eine Liste zurückzugeben? Ich kann das tun:

%Vor%

Aber es scheint, als sollten sie ein einfacherer Weg sein.

Bearbeiten: Als Reaktion auf Vorschläge habe ich beides versucht:

%Vor%

und:

%Vor%

Welche geben beide NotSupportedExceptions mit der Nachricht:

%Vor%     
Matt Burland 22.08.2014, 18:14
quelle

1 Antwort

18

Dies scheint eine Einschränkung in der Art und Weise zu sein, wie LINQ to Entities IQueryable.Cast mit anonymen Typen übersetzt. Sie können dies umgehen, indem Sie es als IEnumerable verwenden (Ihr Arbeitsbeispiel tut dies). Dies bewirkt, dass der Code die Umwandlung in der .NET-Laufzeitumgebung durchführt, nachdem er aus der DB abgerufen wurde, anstatt zu versuchen, sie in der DB-Engine zu verarbeiten. ZB

%Vor%

Oder

%Vor%     
Tim S. 22.08.2014, 18:59
quelle

Tags und Links