IQueryable <out t =“”> </out>的通用扩展方法

时间:2011-07-13 09:41:30

标签: c# entity-framework ef-code-first telerik-mvc

老实说,我之前讨厌disscussed扩展方法。

我的扩展方法为“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 个答案:

答案 0 :(得分:4)

您需要使用方法泛型才能拥有通用参数。

换句话说,这将有效:

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

(请注意,<T>出现在方法名称中)

所有LINQ扩展方法都是以这种方式定义的,但在大多数情况下,由于类型推断,传递具体类型是可选的,这就是为什么很容易错过它。

答案 1 :(得分:4)

试试这个:

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

(我在方法中添加了一个类型变量)