2010-12-13 5 views
5

でIEnumerableを を並べ替える私はタイプを定義している: 次のように三つのフィールド

public class myType 
{ 
    public string firstName { get; set; } 
    public string middleName { get; set; } 
    public string lastName { get; set; } 
} 

私はIEnumerable<myType>を持っています。

myTypeのリストを次のようにソートするには、.OrderBy()エクステンションを使用します。

オブジェクトの順序は姓である必要があります。姓が同じ場合は、名前順に並べる必要があります。最初の名前が同じ場合は、中間の名前で順番に並べる必要があります。

どうすればよいですか?

+1

(メンバーは* *アクセスできるようにする必要があります。 (通常は 'public')を使ってソートします;そして、プロパティは一般的にフィールドより優先されます) –

答えて

17
var qry = items.OrderBy(x => x.lastName).ThenBy(x => x.firstName) 
    .ThenBy(x => x.middleName); 

またはLINQ構文で:

また
var qry = from x in items 
      orderby x.lastName, x.firstName, x.middleName 
      select x; 
+0

+1。ラムダは文字列を返す任意のコードであることができることを覚えておいてください。 nullチェックを実行し、null以外のデフォルト値を戻します。ほとんどの.NETソータの後ろに組み込まれているクイックソートがどのようにNULLを処理するのか分かりません。また、OrderBy()は安定したソートであると主張していますが、そうであればList.SortとArray.Sortにも機能する組み込みソーターを使用せず、不安定です。 – KeithS

+2

@KeithS:文字列を返す必要はありません。後で注文するために値を比較できる限り、値を返すものであれば何でもかまいません。そして、はい、OrderByは本当に*安定しています。 –

7
myList.OrderBy(t => t.lastName).ThenBy(t => t.firstName).ThenBy(t => t.middleName) 

、各OrderByThenByDescendingバージョンを持っているので、OrderByDescendingThenByDescending

関連する問題