Общий метод расширений для IQueryable <out T> - PullRequest
0 голосов
/ 13 июля 2011

Честно говоря, я ненавижу методы расширения, поскольку обсуждал раньше.

У меня есть метод расширения как "ApplySorting"

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

Он был реализован для IQueryable<Brand>это выглядит красиво.Мне нужен другой метод для категории, я должен реализовать другой метод как IQueryable<Category>, и эта история идет.

Вопрос;Как я могу определить IQueryable<T>, чтобы остановить повторный метод расширения?Это должно выглядеть так (конечно, это не правильный код VS 2010 остановил меня.)

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

Заранее спасибо!:)

Ответы [ 2 ]

4 голосов
/ 13 июля 2011

Попробуйте это:

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

(я добавил переменную типа в метод)

4 голосов
/ 13 июля 2011

Вам нужно сделать метод generic , чтобы иметь общие параметры.

Другими словами, это будет работать:

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

(обратите внимание, что <T> присутствует в имени метода)

Все методы расширения LINQ определены таким образом, но в большинстве случаев передача конкретного типа является необязательной в связи с выводом типа, поэтому его легко пропустить.

...