如何构造指向扩展方法的委托

时间:2010-08-30 13:42:48

标签: c# linq delegates

我有一个LINQ查询,我希望有一个委托,我可以分配“OrderBy”或“OrderByDescending”方法。 “OrderBy”扩展方法的签名是:

public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
    this IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector)

有人能告诉我代表的样子吗?

3 个答案:

答案 0 :(得分:2)

public delegate IOrderedEnumerable<TSource> OrderByFunc<TSource, TKey>(
    IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector);

用法:

public OrderByFunc<TSource, TKey> GetOrderByFunc<TSource, TKey>(bool descending)
{
    if (descending)
    {
        return Enumerable.OrderByDescending;
    }
    else
    {
        return Enumerable.OrderBy;
    }
}

答案 1 :(得分:1)

您可以在构造委托时忽略“this”参数,也可以从委托挂起的实例构造委托。

delegate IOrderedEnumerable<TSource> OrderDelegate<TSource,TKey>
         (IEnumerable<TSource> source, 
          Func<TSource, TKey> keySelector);

答案 2 :(得分:0)

您需要定义一个函数,该函数将表的类型的对象作为参数,并从您要排序的对象返回值:

假设您有一个People表,每个项目都是Person,并且您希望按LastName排序:

public static string ByLastName(Person p)
{
     return p.LastName;
}


 db.People.Where(p=>p.age > 25).OrderBy(ByLastName);