2012-02-07 3 views
2

У меня есть список ингредиентов с названием ингредиента и соответствующими значениями. который я хочу сортировать в зависимости от заранее определенного порядка.Заказать список вручную C#?

List<Ingredients> frmltnIngredientsList = new List<Ingredients> 

В списке может быть до 10 записей. Первые четыре записи должны быть в порядке:

  • белка
  • масло
  • волокно
  • Ash

, а остальные из них могут быть в любом порядке

+0

Вы готовите с пеплом ?! Это ново для меня! :) – Benjol

ответ

12

Вы можете сделать что-то вроде этого:

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

Звонок OrderBy даст IOrderedEnumerable<Ingredient>. Таким образом, вы должны назначить, что переменный,

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

... или позвонить ToList(), чтобы иметь возможность назначить его в переменную List<Ingredient> типа:

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

Это, конечно, может быть прибиралось немного. Либо вы могли бы иметь SortOrder собственности на вашем Ingredient списке и просто запустить .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

А, да, я только хотел показать, как вызвать метод, но теперь я понимаю, что мой код, по-видимому, подразумевает, что метод изменяет источник. Будет обновляться, чтобы избежать дальнейших путаниц. –

Смежные вопросы