9
votes

Les arguments de type pour la méthode system.Linq.Enumérable.orderby ne peuvent pas être déduits de l'utilisation

J'essaie de suivre la démo de cette Lien pour ajouter un JQGrid à une application MVC.

J'ai une table nommée des entreprises que j'essaie d'afficher dans une grille. Une entreprise contient simplement un identifiant et un nom.

Je cours dans une erreur dans ma fonction de contrôleur: xxx

Je reçois une erreur sur la ligne qui appelle Order Orderby ():

Les arguments de type pour la méthode 'system.linq.enumerable.orderby (System.Collections.Generic.Inédirent, system.func)' ne peuvent pas être déduits de l'utilisation. Essayez de spécifier les arguments de type explicitement.

Je n'ai vraiment aucune idée de ce que signifie l'erreur, et je n'ai pas été en mesure de trouver une explication. Je ne sais pas ce qui provoque cette erreur sur une fonction d'ordre simple.


1 commentaires

Il suffit d'ajouter à l'aide de system.linq.dynamic; ou à l'aide de system.linq.dynamic.core; pour les projets de base.


6 Réponses :


20
votes

Vous ne pouvez pas ORDREBY une chaîne; Vous devez passer une expression de Lambda ou un délégué.

Vous devez utiliser Dynamic Linq , comme mentionné dans le tutoriel.


7 commentaires

Avez-vous un exemple de comment je peux le faire ici?


Vous devez simplement inclure la bibliothèque et l'espace de noms.


J'essaie d'utiliser Dynamic Linq. Le problème est que je ne connais pas la propriété que je trie. Je le passe comme une corde. Comment puis-je convertir la chaîne en une expression Lambda?


Si vous utilisez Dynamic Linq, vous pouvez transmettre une chaîne. Sinon, vous aurez besoin de construire un arbre d'expression.


Je ne peux pas passer une chaîne, ma fonction Orderby () ne prend pas une chaîne en tant que paramètre. Il s'attend à ce que System.Linq.expressions.expression >


@Steven: Avez-vous ajouté le en utilisant instruction pour dynamique LINQ?


Ajouter "à l'aide de system.linq.dynamic" en haut du fichier.




29
votes

La réponse spécifique à cette question est que vous devez ajouter xxx

et vous devez ajouter une référence à dynamic.dll dans votre projet.


3 commentaires

Cela devrait être la bonne réponse. Aucune idée pourquoi cela n'est pas accepté comme réponse.


Dans mon cas, c'est à l'aide du système.Linq.dynamic.core; et ne pas utiliser system.linq.dynamic. Notez le noyau


en utilisant system.linq.dynamic.core; est bien nécessaire, au moins dans .NET 5.0



7
votes

Je sais que c'est une erreur d'école-garçon de ma part, mais j'ai eu cette même erreur "CS0411 les arguments de type pour la méthode" Enumérable.orderby (iEnumerable, Func) "ne peut pas être déduit de l'utilisation. Essayez de spécifier le type Arguments explicitement. ".

Il allume la" propriété "que je traitais, était en fait une fonction et j'avais omis le" () ". Il m'a fallu des âges de trouver!

dans mon code exerpt: xxx

devrait avoir été xxx P> Je pensais juste que je voudrais en parler ......


2 commentaires

Pourrait ne pas être le bon endroit, mais vous avez sauvé ma vie.


Merci, cela a résolu mon problème. J'ai supposé que quelque chose était une propriété et non une fonction ...



2
votes
  1. Ajouter la référence system.linq.dynamic.dll.dll à votre projet.
  2. Ajoutez ensuite l'espace de noms: à l'aide du système.LINQ.DYNAMIC;

1 commentaires

n'existe pas dans le noyau .NET Noyau ou EF. Toute alternative?



0
votes

Si vous référencez system.linq.dynamic , n'oubliez pas d'ajouter à l'aide de system.linq.dynamic; Si vous référencez system.linq.dynamic.core , n'oubliez pas d'ajouter à l'aide de system.linq.dynamic.core;


0 commentaires