如何分组嵌套列表?

时间:2016-03-11 14:26:08

标签: c#

我有一个对象列表,每个对象都包含一个字符串列表,我想在列表中使用包含相同值的组对象。 我正在尝试这样的事情,但它将它们全部放在同一个列表中。

List<Item> Items = new List<Item>();
Item Item1 = new Item();
Item1.Id = "1";
Item1.Names.AddRange(new List<string> { "A" });
Items.Add(Item1);

Item Item2 = new Item();
Item2.Id = "2";
Item2.Names.AddRange(new List<string> { "B" });
Items.Add(Item2);

Item Item3 = new Item();
Item3.Id = "3";
Item3.Names.AddRange(new List<string> { "A", "C" });
Items.Add(Item3);

List<List<Item>> GroupedItems = Items.GroupBy(u => u.Names.GroupBy(s => s)).Select(t => t.ToList()).ToList();

我希望在此方案中发生的是GroupedItems包含两个列表,第一个包含Item1Item3,第二个包含Item2

1 个答案:

答案 0 :(得分:0)

List<List<Item>> GroupedItems = Items
    // Select only distinct names that can occur
    .SelectMany(x => x.Names).Distinct()
    // For every unique name find items that have it in Names
    .Select(name => Items.Where(x => x.Names.Contains(name)).ToList())
    .ToList();