1. ホーム
  2. c#

[解決済み】LINQで複数オーダーバイ【重複

2022-04-20 23:54:23

質問

まず、LINQを使ってListで操作したい基本的なクラス、以下のようなものから始めます。

public class FooBar   
{  
    public virtual int Id { get; set; }  
    public virtual string Foo { get; set; }  
    public virtual string Bar { get; set; }
}

これは、私が最終的にラムダではないLINQのものを使って私の問題を解決するために見つけたものです。

// code somewhere else that works and gets the desired results  
var foobarList = GetFooBarList();  // Abstracted out - returns List<Foobar>  

// Interesting piece of code that I want to examine
var resultSet = from foobars in foobarList  
                orderby foobars.Foo, foobars.Bar  
                select foobars;

// Iterate and do something interesting  
foreach (var foobar in resultSet)  
{  
    // Do some code  
}

私が本当に気になるのは、Lambdaベースの拡張メソッドを使って、ジェネリックな IEnumerable を使えば、同じことができます。 Googleが教えてくれたのは、以下のようなことをすれば達成できるということです。

var resultSet = foobarList.OrderBy(x => new {x.Foo, x.Bar})  
                          .Select(x=>x);

しかし、そうすると foreach ステートメントを使用します。 このエラーは、少なくとも1つのオブジェクトが IComparible に無名型を使用しているため、そのように見えるのでしょう。 .OrderBy() メソッドを使用します。

では、Lambdaの方法を使って、私が望むことを実現する方法はあるのでしょうか?

どのように解決するのですか?

を使用することができます。 次に 降順(ThenByDescending 拡張メソッドです。

foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)