2012-02-07 19 views
2

私は成分の名前と対応する値の成分のリストを持っています。私はあらかじめ定義された順序に応じて並べ替える必要があります。リストを手動で注文するC#?

List<Ingredients> frmltnIngredientsList = new List<Ingredients> 

リストには最大10個のレコードを含めることができます。

  • プロテイン
  • ファイバー
  • アッシュ

し、それらの残りの部分は任意の順序

+0

あなたが灰で調理します!それは私にとって初めてのことです! :) – Benjol

答えて

12

かになります。最初の4つのレコードが順になっている必要がありあなたは次のようなことをすることができます:

frmltnIngredientsList.OrderBy(item => 
    item.Name == "Protein" ? 1 : 
    item.Name == "oil" ? 2 : 
    item.Name == "Fibre" ? 3 : 
    item.Name == "Ash" ? 4 : 
    5); 

OrderByコールではIOrderedEnumerable<Ingredient>が返されます。それはもちろん片付けでき

frmltnIngredientsList = frmltnIngredientsList.OrderBy(item => ...).ToList(); 

:だからList<Ingredient>タイプのあなたの変数に割り当てることができるように、変数に

var orderedList = frmltnIngredientsList.OrderBy(item => ...); 

ていることに割り当てる...またはToList()を呼び出す必要があります少し。あなたのIngredientリストにSortOrder性質を持っているだけで.OrderBy(x => x.SortOrder)を実行するか、少なくとも視界の外にロジックを移動することができ可能性が次のいずれかの

public static class IngredientExtensions 
{ 
    public static int GetSortNumber(this Ingredient item) { 
     return item.Name == "Protein" ? 1 : 
      item.Name == "oil" ? 2 : 
      item.Name == "Fibre" ? 3 : 
      item.Name == "Ash" ? 4 : 
      5; 
    } 
} 

... 

var orderedList = frmltnIngredientsList.OrderBy(item => item.GetSortNumber()); 
+0

こんにちはデイヴィッド、私はこの作業を得ることはできません – sony

+0

'OrderBy'はこの方法では動作しません。レイジー実行を使用するので、データにアクセスするまで何もしません。 'frmltnIngredientsList' =' frmltnIngredientsList.OrderBy(item => item.GetSortNumber()).ToList(); 'を使用してください。 – ken2k

+0

ああ、はい、私はメソッドを呼び出す方法を示すことを意味しましたが、私のコードはメソッドがソースを変更することを暗示しているようです。さらなる混乱を避けるために更新されます。 –

関連する問題