web-dev-qa-db-ja.com

OrderByのラムダ式で降順?

通常のLinqの文法ではorderby xxx descendingはとても簡単ですが、Lambda式でこれを行うにはどうすればよいでしょうか。

244
silent

Brannonが言うように、それは 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);
418
Jon Skeet

System.Linq.Enumerable.OrderByDescending()を使いますか?

例えば:

var items = someEnumerable.OrderByDescending();
63
Brannon

これを試して:

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);                
}
21
Anton P

これを別の方法で試してください。

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

Queryable.ThenBy

14
Sujit

これは数値フィールドがある状況でのみ機能しますが、次のようにフィールド名の前にマイナス記号を付けることができます。

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

ただし、int?double?、またはdecimal?フィールドで実行している場合、これはOrderByDescendingとは少し異なります。

OrderByDescendingでは、nullが最後にくるようになりますが、このメソッドではnullが先頭になります。データを分割して後で結合することなく、nullをシャッフルしたい場合に便利です。

LastOrDefault()は通常は機能しませんが、Tolist()を使用すると機能します。このようにOrderByDescendingを使用する必要はありませんTolist()

GroupBy(p => p.Nws_ID).ToList().LastOrDefault();
1
Kawindu