Incapables de trier avec le nom de la propriété dans LINQ OrderBy
Erreur est
LINQ to entities ne reconnaît pas la méthode " du Système.Objet
GetValue(Système D'.Objet Du Système.Object [])', et cette méthode
ne peut pas être traduit dans un magasin d'expression.
Mon code est
public static GridResult GetAllUsers(int count, int tblsize,string sortcreteria)
{
using (UserEntities entity = new UserEntities())
{
var data = entity.User_Details.Take(count)
.OrderBy(i =>.GetType().GetProperty(sortcreteria).GetValue(i,null))
.Skip(tblsize).ToList();
result.DataSource = data;
result.Count = entity.User_Details.Count();
}
return result;
}
Comment trier avec le nom de la propriété en tant que chaîne de caractères?
- peut-on, par ordre croissant ou décroissant
- Une question très semblable stackoverflow.com/q/15973414/413032
- "LINQ to entities ne reconnaît pas la méthode" signifie que je ne peut pas traduire la réflexion expression SQL.
- stackoverflow.com/a/7246796/413032
Vous devez vous connecter pour publier un commentaire.
Juste ajouter l'extension suivante de votre code et vous êtes bon pour aller:
}
Utilisation:
Edit:
Pour le soutien à l'
ThenBy
méthode cependant, les méthodes suivantes de retourner unIOrderedQueryable
doit prendre soin de tout cela:IOrderedQueryable
?ThenBy
méthode quiIOrderedQueryable
fournit.On pourrait essayer de faire cela à l'aide de l' (un peu vieux) Dynamique LINQ bibliothèque:
Sinon, vous pouvez toujours trier la séquence à l'aide de votre requête initiale en déplaçant les objets en mémoire, depuis le LINQ to entities fournisseur ne peut pas traduire les appels à l'API Reflection en SQL:
AsEnumerable()
(ou de l'une des méthodesToList()
,ToArray()
et ainsi de suite) et les forces de la requête LINQ pour être évalué sur la base de données, ce qui va provoquer la séquence résultante d'être transférée dans la mémoire. De là, vous pouvez facilement commander les objets par la valeur de la propriété portant le nom spécifié.sortcriteria
.Vous aurez probablement besoin d'utiliser
Arbres d'Expression
pour construire le Linq déclarationOrderBy(x => x.SomeProperty)
.Créer un OrderBy Expression LINQ/Lambda
Créer LINQ to entities OrderBy expression à la volée