2

我有一个包含类别和产品作为属性的列表,我希望将与类别相关的所有产品分开在不同的列表中。

目前我有这个

Products products = new Products();

        products.productList.Add(new Products("Fruit", "Apples"));
        products.productList.Add(new Products("Fruit", "Oranges"));
        products.productList.Add(new Products("Fruit", "Bananas"));
        products.productList.Add(new Products("Fruit", "Grapes"));
        products.productList.Add(new Products("Vegetables", "Tomatoes"));
        products.productList.Add(new Products("Vegetables", "Lettuce"));
        products.productList.Add(new Products("Vegetables", "Onions"));
        products.productList.Add(new Products("Dairy", "Milk"));
        products.productList.Add(new Products("Dairy", "Yogurth"));
        products.productList.Add(new Products("Dairy", "Eggs"));

        List<IEnumerable<string>> distinctCats = products.productList.GroupBy(s => s.Category).Select(s => s.Select(v => v.Product)).ToList();

但我似乎无法从 distinctCats 中获取值。而且我想获得类似具有实际值的普通 List productList 的东西。

感谢您的帮助和时间

4

2 回答 2

10

如果要将列表按类别划分为子列表:

var categoryLists = products.GroupBy(p => p.Category)
                            .Select(g => g.ToList());

现在,categoryLists是一个IEnumerable<List<Product>>.

要对此进行迭代,您可以说:

foreach(var categoryList in categoryLists) {
    foreach(var product in categoryList) {
        // do something with product
    }        
}
于 2012-04-24T09:19:49.340 回答
1

不知道我理解你想要什么,但似乎你需要这样的东西:

var products=new List<Product>{};
var productsInCategories=products.ToLookup(p=>p.Category);

现在每个 productsInCategories[i] 都包含一个“subList”(实际上是 IEnumerable)。

于 2012-04-24T09:30:56.380 回答