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
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? –
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 –
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. –