Ich frage mich, wie ich Orderby-Ausdrücke in einer Liste speichern kann. Das wollte ich schreiben:
%Vor%Dann:
%Vor% funktioniert für p.Name
, funktioniert aber nicht für p.Id
( list[1]
), da die folgende Ausnahme gelöscht wird
In EntityFramework.SqlServer.dll ist eine nicht behandelte Ausnahme vom Typ 'System.NotSupportedException' aufgetreten Weitere Informationen: Der Typ 'System.Int32' kann nicht in den Typ 'System.Object' umgewandelt werden. LINQ to Entities unterstützt nur das Importieren von EDM-Primitiv- oder Aufzählungstypen.
Welche Art von Liste muss ich verwenden?
Hier ist meine Lösung (mit Reflection und basierend auf DynamicLinq Ideen):
Definieren einer ConvertableExpression
-Klasse, damit wir Aufrufe an unsere benutzerdefinierte OrderBy()
:
Einführung einer Extension-Methode für einfacheres Casting von normalen Expression
:
Erweitern von IQueryable
mit reflektionsbasierter Implementierung von OrderBy()
:
Verwendung:
%Vor%Es sieht also so aus, als ob die Implementierung von OrderBy für EF funktioniert, indem überprüft wird, ob & lt; T & gt; ist eine Struktur oder ein Objekt, und Sie sagen, dass sie OrderBy & lt; ..., object & gt; (someStructTypeVariable)
aufrufen sollAls Workaround würde ich Sie bitten, ganze Delegierte anstelle von expresions zu speichern.
Versuchen Sie Folgendes:
%Vor%Tags und Links c# entity-framework linq lambda