Как добавить направление сортировки с Linq для SQL? - PullRequest
2 голосов
/ 11 ноября 2009

Предположим, у меня есть выражение linq q, и я хочу добавить сортировку к этому запросу:

q = q.OrderBy(p => p.Total);

но для сортировки есть опция desc / asc для SQL, как добавить ее в приведенное выше выражение linq?

Ответы [ 2 ]

4 голосов
/ 11 ноября 2009

Для этого есть другой метод, OrderByDescending

Возможно, это немного излишне, но если вы действительно хотите передать параметр, указывающий порядок сортировки, вы можете создать метод расширения:

public static IOrderedEnumerable<TResult> OrderBy<TResult,TKey>(this IEnumerable<TResult> source, Func<TResult, TKey> keySelector, bool ascending)
{
   Func<Func<TResult, TKey>, IOrderedEnumerable<TResult>> orderMethod = source.OrderBy;

   if(!ascending)
      orderMethod = source.OrderByDescending;

   return orderMethod.Invoke(keySelector);
}

Так ты сможешь сделать

bool ascending = true;
list.OrderBy(item => item.Name, ascending);
3 голосов
/ 11 ноября 2009

OrderBy будет сортироваться по возрастанию, для убывания используйте OrderByDescending:

q = q.OrderByDescending(p => p.Total);

А если вы хотите упорядочить по нескольким столбцам, используйте методы ThenBy и ThenByDescending.

q = q.OrderBy(p => p.Col1).ThenByDescending(p => p.Col2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...