2017-08-31 87 views
2

換句話說,我需要列表「類別」中的所有元素爲「父」,列表中的元素「商品」爲孩子。如何使用C#中的foreach在列表中創建列表?

public string GetCommodities() 
    { 
     List<dynamic> categories = new List<dynamic>(); 
     List<dynamic> commodities = new List<dynamic>(); 

     foreach (var comcat in QuickQuoteRepo.CommodityCategories.All().OrderBy(o => o.Order)) 
     { 
      categories.Add(new 
      { 
       comcat.Category, 
      }); 
      foreach (var com in comcat.Commodities.OrderBy(o => o.Name)) 
      { 
       commodities.Add(new 
       { 
        com.Name, 
       }); 
      } 
     } 
     var response = new JavaScriptSerializer().Serialize(commodities); 

     return response; 
    } 

,看看它是否有可能每個類別中的所有商品的名稱,這的foreach內。

我嘗試添加一個動態清單,如:

dynamic listOfElements = new { CAT = categories, COMM = commodities }; 

但它簡化版,返回elemnts父母或類別的相關性。與添加相同

commodities.Add(new 
       { 
        comcat.Category, 
        com.Name, 
       }); 
+0

你整理商品進行分類?或者你是否希望每個類別都有一個與所有商品相關的清單? – WithMetta

+0

正在定義一個新類來保持結果的一個選項? – Sach

+0

我使用的這種方法是按類別名稱排序商品。但我也需要,每一類都與其所有商品相關聯。 –

回答

0
public string GetCommodities() 
{ 
    List<dynamic> categoryCommodityList = new List<dynamic>(); 
    foreach (var comcat in QuickQuoteRepo.CommodityCategories.All().OrderBy(o => o.Order)) 
    { 
     var allCommodities = comcat.Commodities.OrderBy(o => o.Name).Select(com => com.Name).ToList(); 
     categoryCommodityList.Add(new { Catagory = comcat.Category, Items = allCommodities }); 
    } 
    return new JavaScriptSerializer().Serialize(categoryCommodityList); 
} 
+1

非常感謝你! –

0

您的方法不是百萬英里關閉,但它確實需要進行一些更改才能獲得所需內容。這裏是什麼,我想你一個版本正在尋找:

public string GetCommodities() 
{ 
    List<dynamic> categories = new List<dynamic>(); 

    foreach (var comcat in QuickQuoteRepo.CommodityCategories.All().OrderBy(o => o.Order)) 
    { 
     List<dynamic> commodities = new List<dynamic>(); 

     foreach (var com in comcat.Commodities.OrderBy(o => o.Name)) 
     { 
      commodities.Add(new 
      { 
       com.Name, 
      }); 
     } 

     categories.Add(new 
     { 
      comcat.Category, 
      Commodities = commodities 
     }); 
    } 
    var response = new JavaScriptSerializer().Serialize(categories); 

    return response; 
} 

的主要變化是:

  1. List<dynamic> commodities已被移動foreach內,以創建每個特定列表類別。
  2. 該類別是在建立其商品清單後添加的,然後將其添加爲類別對象上的新屬性Commodities
  3. categories變量是序列化的,而不是commodities

如果這不是你所追求的結構,讓我知道,我會更新這個答案。對代碼有各種其他改進,但現在我將限制此答案的範圍。

0

你的課堂結構不支持親子關係。我的意思是,如果你想要的是,每個類別商品持有的名單,那麼你就需要這樣的事:

var result = from c in comcat 

      select new { Category = c, Commoddities = c.Commoddities};   

這將返回分類,包括它下面的所有商品的層次結構。

如果你只是接收平面數據集,那麼你需要的東西是這樣的:

var result = from c in comcat 
      select new { Category = c, 
          Commoddities = c.Where(x=>x.Category.Name == c.Name).Select(x=>x.Commodity) };   

希望你的想法...