我有一份配料清单,配料名称和相应的值。我想根据预先定义的顺序进行排序。手动订购清单C#?
List<Ingredients> frmltnIngredientsList = new List<Ingredients>
该列表最多可以有10条记录。前四个记录应该是顺序:
- 蛋白
- 油
- 光纤
- 灰
和他们其余的人可以在任何顺序
我有一份配料清单,配料名称和相应的值。我想根据预先定义的顺序进行排序。手动订购清单C#?
List<Ingredients> frmltnIngredientsList = new List<Ingredients>
该列表最多可以有10条记录。前四个记录应该是顺序:
和他们其余的人可以在任何顺序
你可以这样做:
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());
嗨大卫,我dint得到这个工作 – sony 2012-02-07 12:15:25
'OrderBy'不这样工作:它使用惰性执行,所以它不会做任何事情,直到您访问您的数据。使用'frmltnIngredientsList' ='frmltnIngredientsList.OrderBy(item => item.GetSortNumber())。ToList();'代替。 – ken2k 2012-02-07 12:18:53
啊,是的,我只是想说明如何调用这个方法,但我现在意识到我的代码似乎意味着该方法会改变源代码。将进行更新以避免更多混淆。 – 2012-02-07 12:28:01
您与灰做饭?这对我来说是新的! :) – Benjol 2012-02-07 11:48:23