将List <Product>拆分为SubLists <Product>

Joh*_*ann 2 c# linq linq-to-objects c#-4.0

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

目前我有这个

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();
Run Code Online (Sandbox Code Playgroud)

但我似乎无法从distinctCats中获取值.我想得到一个类似普通List productList的实际值.

谢谢你的帮助和时间

jas*_*son 10

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

var categoryLists = products.GroupBy(p => p.Category)
                            .Select(g => g.ToList());
Run Code Online (Sandbox Code Playgroud)

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

要迭代这个,你可以说:

foreach(var categoryList in categoryLists) {
    foreach(var product in categoryList) {
        // do something with product
    }        
}
Run Code Online (Sandbox Code Playgroud)