Как структурировать делегат, который указывает на метод расширения - PullRequest
1 голос
/ 30 августа 2010

У меня есть запрос LINQ, и я хочу иметь делегата, которому я могу назначить методы "OrderBy" или "OrderByDescending".Подпись метода расширения OrderBy :

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

Может кто-нибудь показать мне, как будет выглядеть делегат?

Ответы [ 3 ]

2 голосов
/ 30 августа 2010
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 голос
/ 30 августа 2010

Вы можете либо игнорировать параметр "this" при структурировании своего делегата, либо вы можете создать делегат из экземпляра, с которым делегат зависал.

delegate IOrderedEnumerable<TSource> OrderDelegate<TSource,TKey>
         (IEnumerable<TSource> source, 
          Func<TSource, TKey> keySelector);
0 голосов
/ 30 августа 2010

Вам нужно определить функцию, которая принимает в качестве параметра объект типа таблицы и возвращает значение из объекта, по которому вы хотите отсортировать:

Допустим, у вас есть таблица People, каждый элемент имеет значение Person, и вы хотите отсортировать по LastName:

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


 db.People.Where(p=>p.age > 25).OrderBy(ByLastName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...