2009-07-15 14 views
3

おはようございます!私はLINQを使ってオブジェクトのリストを照会し、列挙値、文字列の値、そして残りのリストを類似のファッションLINQ初心者のソート順でソートします。LINQ - OrderBy EnumValueとUnion結果セットを使ってオブジェクトのリストをソートする?

//CTOR for my class 
MyClass(id, "Name Value Here", Enum.EnumValueHere); 

私は、これらのオブジェクトのリストを作成して、可変Enum.EnumValue [X]を持つすべての項目は、リストの最初に表示される名前順にソート、ソートされたすべての他の項目が続いていることを彼らがそのようなソートします同様の方法(SQLでの結果セットの連合のようなalmnost)

//What I have so far (only sorts the list) 
List<MyClass> = (from s in MyClass orderby s.EnumValue, s.NameValue select s).ToList(); 

どれ教祖のそこは、共有するために、いくつかのLINQのマジックを持っていますか?

ありがとうございます!

+0

SQLでは、クエリごとに1つのORDER BYしか使用できないため、各UNIONセクションではなく、セット全体を順序付けするようにしてください。 UNIONの各セクションを別々にソートするトリックがありますが、それはあなたが求めているとは思いません。 –

答えて

10

正確にはわかりませんが、このようなものを使用できますか?

// Using Color as enum just to make things clearer 
class ClassyClass 
{ 
    public string Name {get; private set;} 
    public Color Color {get; private set;} 
    public ClassyClass(id, string name, Color color) { ... } 
} 


var orderedList = collectionOfClassyClasses 
      .OrderBy(x => x.Color != Color.Red) // False comes before true 
      .ThenBy(x => x.Color) 
      .ThenBy(x => x.Name) 
      .ToList(); 

collectionOfClassyClassesClassyClassオブジェクトのコレクションのいくつかの並べ替えた場合、orderedListは、色別に並べられた他、その後赤に設定された色を持つすべての人々が最初に来るように、命じた名前で注文し、されるだろうし、その後名。少なくとも私はそれは...それをテストしていないと思う:pそれがない場合、私に知らせて、hehe。

+1

ありがとうございます。あなたの編集は正しいと証明されました。つまり、偽が評価されたからです。b4 true ...あなたの解決策は素晴らしいです。 –

+0

これはうまくいっています:)編集を削除してコードを修正して、代わりに正しい= – Svish

0

最初のリストを取り、ienumerableを取るlist.AddRange()を実行します。

関連する問題