[英]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.