LINQ分组到多个组

bra*_*ing 3 c# linq

我有以下数据

IEnumerable<Tuple<T, List<U>>> Data;
Run Code Online (Sandbox Code Playgroud)

或者也可以表达为

Dictionary<T, List<U>> GroupedA
Run Code Online (Sandbox Code Playgroud)

给出一个T它可能属于一个或多个U.我想反转这个,所以我可以查找U并找到结构中所有相关的T

Dictionary<U, List<T>> GroupedB;
Run Code Online (Sandbox Code Playgroud)

试着想出一个简洁的LINQ表达式来反转字典.

编辑

实际上,下面的正确答案表明我真正想要的是

ILookup<U, T>
Run Code Online (Sandbox Code Playgroud)

而不是

Dictionary<U, List<T>>
Run Code Online (Sandbox Code Playgroud)

Ily*_*nov 6

//Populating data
Dictionary<int, List<string>> GroupedA = new Dictionary<int, List<string>>();

GroupedA.Add(1, new List<string>{"1","2","3"});
GroupedA.Add(2, new List<string>{"1","32","3","4"});
GroupedA.Add(3, new List<string>{"1","52","43","4"});


//Inverting data
ILookup<string, int> GroupedB = 
       GroupedA.SelectMany(pair => pair.Value.Select(val => new{pair.Key, val}))
               .ToLookup(pair => pair.val, pair => pair.Key);



//Printing data 
var pairs = GroupedB.Select(pair => string.Format("{0} : {1}", pair.Key, string.Join(",", pair)));

Console.WriteLine (string.Join(Environment.NewLine, pairs));
Run Code Online (Sandbox Code Playgroud)

打印:

1 : 1,2,3 
2 : 1 
3 : 1,2 
32 : 2 
4 : 2,3 
52 : 3 
43 : 3 
Run Code Online (Sandbox Code Playgroud)