我有一个对象列表,每个对象都包含一个字符串列表,我想在列表中使用包含相同值的组对象。 我正在尝试这样的事情,但它将它们全部放在同一个列表中。
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
包含两个列表,第一个包含Item1
和Item3
,第二个包含Item2
。
答案 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();