2011-07-12 76 views
0

選擇我有一個列表:簡單的從泛型列表

List<Product> allProducts = new List<Product>();

產品可以有相同的顯示名稱,但不同的URL:秒。我想要做的是獲得每個產品的所有網址。

foreach (Product p in allProducts.Distinct().ToList()) 
    { 
     string displayname = p.GetDisplayName(); 
     string url = p.GetPublishedUrls()[0]; 
    } 

但我在這裏卡住了。任何幫助表示讚賞!

+0

我不知道我理解你的問題。你的意思是你有產品A,B,C,其中A有URL(A1,A2,A3),B有URL(B2,B3,B4,B5),C有URL(C2,C3)?而且,你在尋找什麼樣的輸出? – Shiroy

回答

1

使用的GroupBy:

foreach (var productGroup in allProducts.GroupBy(p => p.GetDisplayName()) { 
    # productGroup.Key is the display name 
    # and productGroup enumerates all the products for the display name 
} 
+0

完美,謝謝 – y0han

0

你想這樣的:

List<string> allUrls = allProducts.SelectMany(p => p.GetPublishedUrls()).ToList(); 
0

給一個的SelectMany去 - 這應返回一個IEnumerable,如果我正確讀取您的代碼段。

IEnumerable<string> publishedUrls = allProducts.SelectMany(p => p.GetPublishedUrls()); 
0

不太清楚我明白你的問題,但如果找你試圖創造它的每個項目都有產品展示名和URL列表,這裏的代碼:

var res = from p in products.AsQueryable() select new {ProductName = p.Name,ProductUrls = p.Urls};

0

代碼:

class Product 
{ 
    public string DisplayName; 
    public string URL; 
} 


List<Product> allProducts = new List<Product>(); 

allProducts.Add(new Product { DisplayName = "A", URL = "A1" }); 
allProducts.Add(new Product { DisplayName = "A", URL = "A2" }); 
allProducts.Add(new Product { DisplayName = "A", URL = "A3" }); 

allProducts.Add(new Product { DisplayName = "B", URL = "B1" }); 
allProducts.Add(new Product { DisplayName = "B", URL = "B3" }); 

var pGroups = from p in allProducts 
       group p by p.DisplayName into g 
       select new { DisplayName = g.Key, URLList = g }; 

foreach (var p in pGroups) 
{ 
     Console.WriteLine("Product Name: " + p.DisplayName); 
     foreach (var u in p.URLList) 
     { 
      Console.WriteLine(" URL: " + u.URL); 
     } 
} 

輸出:

Product Name: A 
    URL: A1 
    URL: A2 
    URL: A3 
Product Name: B 
    URL: B1 
    URL: B3