繁体   English   中英

来自通用列表的简单 select

[英]Simple select from generic list

我有一个清单:

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

产品可以具有相同的显示名称,但不同的 URL:s。 我想做的是获取每个产品的所有网址。

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

但我被困在这里。 任何帮助表示赞赏!

使用分组方式:

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
}

你想要这个吗:

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

给 SelectMany 一个 go - 如果我正确阅读了您的代码片段,这应该返回一个 IEnumerable。

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

不太确定我是否理解您的问题,但如果您尝试创建一个列表,其中每个项目都有产品显示名称和网址,代码如下:

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

代码:

 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);
       }
 }

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM