C# 拆分列表<;产品>;分为子列表<;产品>;

C# 拆分列表<;产品>;分为子列表<;产品>;,c#,linq,c#-4.0,linq-to-objects,C#,Linq,C# 4.0,Linq To Objects,我有一个以类别和产品为属性的列表,我希望在不同的列表中分离属于某个类别的所有产品 现在我有这个 Products products = new Products(); products.productList.Add(new Products("Fruit", "Apples")); products.productList.Add(new Products("Fruit", "Oranges")); products.productList.A

我有一个以类别和产品为属性的列表,我希望在不同的列表中分离属于某个类别的所有产品

现在我有这个

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();
Products=新产品();
产品。产品列表。添加(新产品(“水果”、“苹果”));
产品。产品列表。添加(新产品(“水果”、“橙子”);
产品。产品列表。添加(新产品(“水果”、“香蕉”);
产品。产品列表。添加(新产品(“水果”、“葡萄”));
产品。产品列表。添加(新产品(“蔬菜”、“西红柿”);
添加(新产品(“蔬菜”、“莴苣”);
添加(新产品(“蔬菜”、“洋葱”);
产品。产品列表。添加(新产品(“乳制品”、“牛奶”));
添加(新产品(“乳制品”、“酸奶”);
产品。产品列表。添加(新产品(“乳制品”、“鸡蛋”);
List distinctCats=products.productList.GroupBy(s=>s.Category).Select(s=>s.Select(v=>v.Product)).ToList();
但我似乎无法从distinctcat中获取值。我想得到一个普通的列表productList和实际值


感谢您的帮助和时间

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

var categoryLists = products.GroupBy(p => p.Category)
                            .Select(g => g.ToList());
现在,
categoryLists
是一个
IEnumerable

要反复讨论这个问题,您可以说:

foreach(var categoryList in categoryLists) {
    foreach(var product in categoryList) {
        // do something with product
    }        
}

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

var products=new List<Product>{};
var productsInCategories=products.ToLookup(p=>p.Category);
var产品=新列表{};
var productsInCategories=products.ToLookup(p=>p.Categories);

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

您希望得到什么样的输出?不同类别的列表,或包含该类别中产品列表的类别列表?嗨,Jason,是的,我想要var categoryLists=products.GroupBy(p=>p.Category)。选择(g=>g.ToList());但是我如何在其中迭代以获得类别和产品列表呢?