IQueryable<T> Extension de la Méthode ne fonctionne pas
Comment puis-je faire une extension de la méthode qui fonctionne comme ceci
public static class Extensions<T>
{
public static IQueryable<T> Sort(this IQueryable<T> query, string sortField, SortDirection direction)
{
//System.Type dataSourceType = query.GetType();
//System.Type dataItemType = typeof(object);
//if (dataSourceType.HasElementType)
//{
// dataItemType = dataSourceType.GetElementType();
//}
//else if (dataSourceType.IsGenericType)
//{
// dataItemType = dataSourceType.GetGenericArguments()[0];
//}
//var fieldType = dataItemType.GetProperty(sortField);
if (direction == SortDirection.Ascending)
return query.OrderBy(s => s.GetType().GetProperty(sortField));
return query.OrderByDescending(s => s.GetType().GetProperty(sortField));
}
}
Actuellement qui dit que "les méthodes d'Extension doit être défini dans un non-générique statique de la classe".
Comment puis-je faire cela?
OriginalL'auteur Micah | 2010-04-01
Vous devez vous connecter pour publier un commentaire.
Essayez ceci... (mais je ne suis pas sûr qu'il va faire ce que vous voulez.)
... Le paramètre générique doit être sur la méthode et non pas sur la classe. En le déplaçant d'
Extensions<T>
àSort<T>(
devrait vous permettre de se débarrasser de l'erreur de compilation que vous rencontrez.Que pour ce que vous essayez de faire avec réflexion, vous seriez de retour d'un PropertyInfo objet de la clause orderby. Ce n'est probablement pas compable avec l'expression de l'arbre que vous voulez. Vous pouvez regarder la Dynamique LINQ.
... ceci est un extrait de Dynamique LINQ.
Je pense que nous avons tous été là :o) ... bonne chance!
Par ailleurs, ce morceau de code ici stackoverflow.com/questions/41244/dynamic-linq-orderby a vraiment aidé aussi
Si vous allez sur le lien ci-dessus pour ScottGu blog vous permettra d'en savoir plus sur la Dynamique de LINQ
OriginalL'auteur Matthew Whited
Changer cela:
La classe doit être non générique, juste votre méthode d'extension doit être 🙂
OriginalL'auteur Nick Craver
L'erreur déjà vous dit:
Simplement supprimer l'argument de type générique.
Sort<T>
Il résout problème, au moins. Et peut-être qu'il enseigne à quelqu'un de lire des messages d'erreur... Nah, qui suis-je plaisante.
Ne vous inquiétez pas... il suffit de le déplacer le paramètre générique ne va pas résoudre le problème, il va trouver un peu de temps.
OriginalL'auteur Thomas