LINQ による複数の Order By [重複] 質問する

LINQ による複数の Order By [重複] 質問する

まず、LINQ を使用してリスト内で操作する基本クラスから始めます。次のようなものになります。

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 方式を使用して目的を達成する方法はあるのでしょうか?

ベストアンサー1

ThenByおよびThenByDescending拡張メソッドを使用できます。

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

おすすめ記事