Порядок пониження в виразі Ламбда?


250

Я знаю, що в звичайній граматиці Linq orderby xxx descendingце дуже просто, але як це зробити в виразі лямбда?

Відповіді:


428

Як говорить Браннон, це OrderByDescendingі ThenByDescending:

var query = from person in people
            orderby person.Name descending, person.Age descending
            select person.Name;

еквівалентно:

var query = people.OrderByDescending(person => person.Name)
                  .ThenByDescending(person => person.Age)
                  .Select(person => person.Name);

7
«Впорядкувати по person.Name зменшенням» має бути « OrderBy person.Name по спадаючій»
mxmissile

63

Використовувати System.Linq.Enumerable.OrderByDescending()?

Наприклад:

var items = someEnumerable.OrderByDescending();

21

Спробуйте це:

List<int> list = new List<int>();
list.Add(1);
list.Add(5);
list.Add(4);
list.Add(3);
list.Add(2);

foreach (var item in list.OrderByDescending(x => x))
{
    Console.WriteLine(item);                
}

14

Спробуйте це іншим способом:

var qry = Employees
          .OrderByDescending (s => s.EmpFName)
          .ThenBy (s => s.Address)
          .Select (s => s.EmpCode);

Queryable.ThenBy


3

Це працює лише в ситуаціях, коли у вас є числове поле, але ви можете поставити знак мінус перед назвою поля так:

reportingNameGroups = reportingNameGroups.OrderBy(x=> - x.GroupNodeId);

Однак це працює трохи інакше, ніж OrderByDescendingколи ви працюєте на int?або double?абоdecimal? полів.

Те, що станеться, на OrderByDescendingнулях буде в кінці, проти цього методу нулі будуть на початку. Що корисно, якщо ви хочете перемішувати нулі навколо, не розбиваючи дані на шматки та розкладаючи їх пізніше.


1

LastOrDefault()зазвичай не працює, але з Tolist()ним буде працювати. Не потрібно використовувати таке OrderByDescendingвикористання Tolist().

GroupBy(p => p.Nws_ID).ToList().LastOrDefault();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.