2012-11-07 10 views
5

私はPersonというクラスを持っています。このクラスには、人の姓に対応する文字列を反映するプロパティLastNameが含まれています。カスタムオブジェクトのリストのソート

次のように私はリストを作成しました:私がやりたい何

var People = List<Person> 

は、アルファベット順に自分の姓プロパティでソート人です。

いくつかの例を見た後、私は

People = People.OrderBy(p => p.LastName); 

を試みた。しかし、それは動作しません。 LINQを使用して

+1

よう.Tolist()にORDERBYの結果を変換する必要があります。コンパイルエラーですか?またはランタイムエラー?予期しない結果などがあります。 –

+2

これは重複しています。 – Mathias

+0

可能な重複:[リストのカスタム並べ替え](http://stackoverflow.com/q/10049466/299327) –

答えて

13

、あなたはList<Person>に戻って結果を変換する必要があるだろう:

People = People.OrderBy(p => p.LastName).ToList(); 

OrderByIOrderedEnumerable<T>を返すので、あなたはリストにこの背を向けるために余分な呼び出しToList()を必要としています。あなたが効果的にインプレースの並べ替えをしたいので、

しかし、あなたはまた、直接List<T>.Sortを使用することができます。

People.Sort((p1, p2) => p1.LastName.CompareTo(p2.LastName)); 
2

を最も簡単にはToList():

People = People.OrderBy(p => p.LastName).ToList(); 

を使用しているあなたは、新しいを作成するToListが必要注文List<Person>

もう1つのオプションは、List.Sort

People.Sort((p1,p2) => p1.LastName.CompareTo(p2.LastName)); 
0

あなたは常にあなたが `work`しないで何を意味するかを指定し、途中で以下

var people = People.OrderBy(p => p.LastName).ToList(); 
関連する問題