2011-07-12 31 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