我有许多类型的集合我想按不同的属性对每个集合进行排序。比如IEnumerable<Employee>
会按Name
andAge
属性排序, IEnumerable<Department>
会按NumberOfEmployees
andDepartmentName
属性排序。我PaginatedList
习惯在对集合进行排序后对其进行分页。
public class PaginatedList<T> : List<T>
{
public PaginatedList(IEnumerable<T> source, Int32 pageIndex, Int32 pageSize , Func<T,Object> orderBy)
{
this.AddRange(source.OrderBy(orderBy).Skip((PageIndex - 1) * PageSize).Take(PageSize));
}
}
请注意第 4 个参数,它将传递给 OrderBy 扩展方法的排序委托。
我正在使用通用方法来生成第 4 个元素
public Func<T, Object> SortingFactory<T>(String sortby)
{
switch (typeof(T).ToString())
{
case "Employee":
switch(sortby)
{
case "Name":
return new Func<Employee,String>(delegate(Employee e) { return e.Name; });
break;
case "Age":
return new Func<Employee,Int32>(delegate(Employee e) { return e.Age; });
break;
}
break;
case "Department":
switch(sortby)
{
case "NumberOfEmployees":
return new Func<Department,Int32>(delegate(Department d) { return d.NumberOfEmployees; });
break;
case "DepartmentName":
return new Func<Department,String>(delegate(Department d) { return d.DepartmentName; });
break;
}
break;
}
}
但它给了我一个编译错误Cannot implicitly convert type 'System.Func<Employee,String>' to 'System.Func<T,object>'
我也尝试将输出标记为,Func<Object,Object>
但我得到了同样的错误。
我犯了什么错误以及如何使用这种方法。