2011-07-13 6 views
0

Honnêtement, je déteste les méthodes d'extension comme disscussed avant.Méthode des extensions génériques pour IQueryable <out T>

J'ai une méthode d'extension comme "ApplySorting"

public static IQueryable<Brand> ApplySorting(this IQueryable<Brand> data, 
       IList<GroupDescriptor> groupDescriptors, 
       IList<SortDescriptor> sortDescriptors) 

Il a été mis en œuvre pour IQueryable<Brand> il est ressemble bien. J'ai besoin d'une autre méthode pour la catégorie, je devrais mettre en œuvre une autre méthode comme IQueryable<Category> et cette histoire va.

Question; Comment puis-je définir IQueryable<T> pour arrêter la méthode d'extension répétée? Il devrait être ressembler à ceci (bien sûr, il n'est pas un code valide VS 2010 me stoped.)

public static IQueryable<T> ApplySorting(this IQueryable<T> data, 
          IList<GroupDescriptor> groupDescriptors, 
          IList<SortDescriptor> sortDescriptors) 
       where T : IEntity 

Merci à l'avance! :)

Répondre

3

Essayez ceci:

public static IQueryable<T> ApplySorting<T>(this IQueryable<T> data, 
          IList<GroupDescriptor> groupDescriptors, 
          IList<SortDescriptor> sortDescriptors) 
       where T : IEntity 

(j'ai ajouté une variable de type à la méthode)

3

Vous devez créer la méthode générique pour avoir des paramètres génériques.

En d'autres termes, cela fonctionnera:

public static IQueryable<T> ApplySorting<T>(this IQueryable<T> data, 
          IList<GroupDescriptor> groupDescriptors, 
          IList<SortDescriptor> sortDescriptors) 
          where T : IEntity 

(Notez que <T> est présent au nom de la méthode)

Toutes les méthodes d'extension LINQ sont définies de cette façon, mais dans la plupart des cas passer le type de béton est facultatif en raison de l'inférence de type, c'est pourquoi il est facile de le manquer.

+0

grand merci! mais je suis vraiment désolé que votre et Rik répondent même mais j'ai accepté la réponse de rik parce qu'il a énuméré la première réponse. –

Questions connexes