Linq: Queryable.OrderBy () mit einer Sammlung von Expressions

8

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?

    
Zoltan Hernyak 01.07.2014, 06:52
quelle

3 Antworten

1

Hier ist meine Lösung (mit Reflection und basierend auf DynamicLinq Ideen):

Definieren einer ConvertableExpression -Klasse, damit wir Aufrufe an unsere benutzerdefinierte OrderBy() :

abfangen können %Vor%

Einführung einer Extension-Methode für einfacheres Casting von normalen Expression :

%Vor%

Erweitern von IQueryable mit reflektionsbasierter Implementierung von OrderBy() :

%Vor%

Verwendung:

%Vor%     
haim770 01.07.2014, 11:02
quelle
0

probiere das

aus %Vor%     
Harsh 01.07.2014 07:49
quelle
0

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 soll

Als Workaround würde ich Sie bitten, ganze Delegierte anstelle von expresions zu speichern.

Versuchen Sie Folgendes:

%Vor%     
doker 01.07.2014 07:35
quelle

Tags und Links