2009-05-13 4 views
3

Ich versuche, die endgültige Lösung von Phil Haack here zu nehmen und mit seiner Killer-LINQ-Abfrage zu sortieren, aber anstatt Datenkontext zu verwenden, wie er ist, Ich möchte gegen IEnumerable (Of T) abfragen ... kein Glück haben.So verwenden Sie die System.LINQ.Dynamic Assembly mit IEnumerable (Of T)

Public Function DynamicGridData(ByVal sidx As String, ByVal sord As String, ByVal page As Integer, ByVal rows As Integer) As ActionResult 
Dim list As List(Of User) = UserService.GetUserCollection() 
Dim FilteredAndSortedList = list.OrderBy(sidx + " " + sord).Skip(pageIndex * pageSize).Take(pageSize) 

Return JSON(jsonData) 
End Function 

Zur Zeit habe ich den Fehler unter meiner .OrderBy (Sidx + "" + sord) Linie

„Datentyp (en) von teh Typparametern (s) im Erweiterungsmethode‚Public Function SortiertNach (Von TKey) (keySelector als System.Func (Of User, TKey)) Wie System.Linq.IOrderedEnumerable (Of User) 'definiert in' System.Linq.Enumerable 'kann nicht aus diesen Argumenten abgeleitet werden. Angabe des Datentyps (der Daten) explizit könnte diesen Fehler korrigieren. "

EDIT:

fand ich das Problem zu sein, dass meine „Liste“ in dem obigen Beispiel nicht vom Typ IQueryable war. Einfach das Hinzufügen von .AsQueryable() hat den Trick gemacht!

Public Function DynamicGridData(ByVal sidx As String, ByVal sord As String, ByVal page As Integer, ByVal rows As Integer) As ActionResult 
Dim list As List(Of User) = UserService.GetUserCollection() 
Dim FilteredAndSortedList = list.AsQueryable().OrderBy(sidx + " " + sord).Skip(pageIndex * pageSize).Take(pageSize) 

Return JSON(jsonData) 
End Function 

Antwort

2

Ich bin nicht positiv, aber ich denke, es ist mit der Tatsache zu tun hat, dass Ihr in SortiertNach Leiten einer Zeichenfolge zu einem Ausdruck (TDelegate) gegen das ist, was sie erwartet.

Werfen Sie einen Blick auf diesen Artikel und sehen Sie, ob es hilft.

http://msdn.microsoft.com/en-us/library/bb549264.aspx

Edit:

ich einen Blick auf Phils-Code und bei einigen weiteren Dokumentation von Scott Gu bereitgestellt genommen haben. Sie sollten in der Lage sein, eine Zeichenfolge einzugeben, nach der sortiert werden soll. Wenn das der Fall ist, wäre meine nächste Frage, ob deine App funktioniert. Der Grund dafür ist, dass ich mich frage, ob wir einen anderen zugrunde liegenden Fehler haben, den wir vermissen. Wie zum Beispiel Sie JSON (jsondata) zurückgeben, aber ich sehe nicht, wo Sie jsondata initialisieren. Jetzt denke ich nicht, dass das dein Fehler ist, weil du erklärst, dass du es auf der Anweisung durch Aussage bekommst. Wenn Sie jedoch den Fehler tatsächlich erhalten, weil das Objekt, das Sie bestellen möchten, leer ist, haben Sie ein anderes zugrunde liegendes Problem.

+0

vereinbart und dies funktioniert, wenn ich einen Ausdruck wie SortiertNach verwenden (Funktion (x) x.FirstName), aber in der Post von phil - wie ist er in der Lage zu übergeben Sie einen String mit C# noch in Vb dieser Ansatz erfordert einen gültigen Ausdruck? –

+0

Ich habe einen großen Teil des Codes vor der Rückkehr-Anweisung aus Gründen der Kürze weggelassen. Wenn ich das Folgende benutze, funktioniert es ganz gut, also glaube ich nicht, dass etwas anderes kaputt ist. Dim FilteredAndSortedList = list.OrderBy (Funktion (x) x.FirstName) .Skip (pageIndex * pageSize) .Take (pageSize) Geben Sie –

+0

zurück, so scheint es seinen Durchbruch beim Versuch, Sidx + "" Sord in eine Eigenschaft Ihres Benutzerobjekts zu übersetzen . Ich würde einen Blick darauf werfen und sehen, ob Sidx + "" + Sord tatsächlich direkt in eine Eigenschaft übersetzen kann. –