按类别列出的订单列表

时间:2016-04-15 12:37:08

标签: c#

我有一个包含类别列表的列表,在这些类别中也是一个包含产品的列表。

我想订购某些产品类别的产品,如鸡蛋,牛奶,水,冰

这就是我所拥有的:

foreach (var cat in data.List)
        {
            if (cat.Id == "ProductType1")
            {
                cat.Modules.OrderBy(f => f.ProdType == "Eggs").
                    ThenBy(f => f.ProdType == "Milk");                  
            }
        }

但是这不起作用,如果我有更长的prodtype列表,那么写下来会有很多代码

4 个答案:

答案 0 :(得分:2)

在代码中尝试使用内联if语句来设置排序键:

foreach (var cat in data.List)
{
   if (cat.Id == "ProductType1")
   {
      cat.Modules.OrderBy(f => 
                   f.ProdType == "Eggs" ? 1 : f.ProdType=="Milk" ? 2 : 3 );                  
   }
}

修改

如果您有很长的查找列表,则可以改用开关:

foreach (var cat in data.List)
{
   if (cat.Id == "ProductType1")
   {
      cat.Modules.OrderBy (s => 
         {
            int i = 0;
            switch(s)
            {
                case "Eggs": i=1; break;
                case "Milk": i=2; break;
                case "Water": i=3;break;
                default: i=4; break;
            }
            return i;
        });                  
   }
}

答案 1 :(得分:0)

OrderBy需要一个密钥(在这种情况下是属性),它会对集合进行排序,因此您错误地使用它。我能想到的一种方式就像下面的

var result = cat.Modules.Where(f => f.ProdType == "Eggs")
             .Union(cat.Modules.Where(f => f.ProdType == "Milk"))
             .Union(cat.Modules.Where(f => f.ProdType == "Water")).ToList();

答案 2 :(得分:0)

问题不是很清楚,但这可能就是你正在寻找的形式

var orderDict = new Dictionary<string, int>{
      {"Eggs", 0},
      {"Milk", 1},
      {"Water", 2}
}
var sortedbyCat =data.List.OrderBy(g => orderDict[g.Key]);

答案 3 :(得分:0)

cat.Modules.Sort((a, b) => a.ProdType.CompareTo(b.ProdType));

这将按ProdType

命令您的产品 ALPHABETICALLY