2009-09-23 17 views
12

Mam zmienną typu Dictionary<MyType, List<MyOtherType>>
Chcę przekonwertować ją na Lookup<MyType, MyOtehrType>.Konwertuj słownik LINQ na

Chciałem najpierw użyć funkcji Lambda, spłaszczyć słownik, a następnie przekonwertować go na Lookup, używając ToLookup(). Utknąłem ze słownikiem. Myślałem o użyciu SelectMany, ale nie mogę go uruchomić. Ktoś ma pomysł, jak to zrobić?

Odpowiedz

12

Jak o:

var lookup = dictionary.SelectMany(pair => pair.Value, 
            (pair, Value) => new { pair.Key, Value }) 
         .ToLookup(pair => pair.Key, pair => pair.Value); 

To ma ochoty trochę odpadów w ten sposób, gdy Słownik ma już wszystkie informacje pogrupowane odpowiednio, ale nie widzę okrągłą że w prosty sposób. Oczywiście można realizować ILookup<TKey, TValue> się z owinięcia wokół słowniku ...

+0

Dzięki Jon! Dokładnie to, po co byłem! –

14

Taka sama jak metoda Jona, ale unikanie tworzenia typu anonimowego:

var lookup = dictionary 
      .SelectMany(p => p.Value, Tuple.Create) 
      .ToLookup(p => p.Item1.Key, p => p.Item2); 
+1

Dziękuję, proszę pana! Wygląda na to, że C# wygląda :) –