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:
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:
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
Oder
%Vor%