2009-05-13 6 views
3

J'essaie de prendre la solution finale de Phil Haack here et de trier en utilisant sa requête LINQ tueur, mais au lieu d'utiliser le contexte de données comme il est, Je veux interroger IEnumerable (Of T) ... ne pas avoir de chance.Comment utiliser l'assembly System.LINQ.Dynamic w/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 

Actuellement je reçois l'erreur ci-dessous mon .OrderBy (Sidx + "" + sord) ligne

« Type de données (s) du Teh paramètre de type (s) méthode d'extension « Fonction publique OrderBy (Of TKey) (keySelector As System.Func (De l'utilisateur, TKey)) Comme System.Linq.IOrderedEnumerable (Of User) 'défini dans' System.Linq.Enumerable 'ne peut pas être déduit de ces arguments Spécifier le (s) type (s) de données explicitement pourrait corriger cette erreur. "

EDIT:

Je trouve la question d'être que ma « liste » dans l'exemple ci-dessus était pas de type IQueryable. Il suffit d'ajouter .AsQueryable() a fait l'affaire!

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 

Répondre

2

Je ne suis pas positif, mais je pense qu'il a à voir avec le fait que votre passage dans OrderBy une chaîne par opposition à une expression (TDelegate) qui est ce qu'elle attend. Jetez un coup d'oeil à cet article et voyez si cela aide.

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

Edit:

J'ai examiné au code de Phil et à une documentation plus fournie par Scott Gu. Vous devriez être en mesure de passer une chaîne dans laquelle commander par. Cela étant le cas ma prochaine question serait si vous sortez la commande par votre application fonctionne? La raison en est que je me demande si nous avons une autre erreur sous-jacente qui nous manque. Comme par exemple vous retournez JSON (jsondata) mais je ne vois pas où vous initialisez jsondata. Maintenant, je ne pense pas que c'est votre erreur parce que vous déclarez que vous l'obtenez sur la déclaration de commande. Cependant, si vous obtenez l'erreur parce que l'objet que vous essayez de commander est vide, vous avez un autre problème sous-jacent.

+0

D'accord et cela fonctionne quand j'utilise une expression comme OrderBy (Fonction (x) x.FirstName), mais dans le poste de phil - comment est-il capable de passer dans une chaîne en utilisant C# encore en vb cette même approche nécessite une expression valide? –

+0

J'ai omis une grande partie du code avant l'instruction de retour pour plus de brièveté. Si j'utilise ce qui suit, cela fonctionne très bien, donc je ne pense pas que rien d'autre ne soit cassé. Dim FilteredAndSortedList = list.OrderBy (Fonction (x) x.FirstName) .Skip (pageIndex * pageSize) .Take (pageSize) Retourne –

+0

alors il semble que ce soit sa dernière tentative de traduire sidx + "" sord dans une propriété de votre objet User . Je voudrais jeter un coup d'oeil et voir si sidx + "" + sord peut en effet traduire directement à une propriété. –

Questions connexes