2009-09-23 7 views
12

Ho una variabile di tipo Dictionary<MyType, List<MyOtherType>>
Voglio convertirlo in Lookup<MyType, MyOtehrType>.LINQ Converti dizionario da cercare

Volevo utilizzare prima le funzioni Lambda, appiattire il dizionario e convertirlo in Ricerca utilizzando lo ToLookup(). Sono rimasto bloccato con il dizionario. Ho pensato di usare SelectMany ma non riesco a farlo funzionare. Qualcuno ha un'idea di come si fa?

risposta

12

ne dite:

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

ci si sente come un po 'di uno spreco fare questo quando il dizionario ha già tutte le informazioni raggruppate in modo appropriato, ma non riesco a vedere un modo semplice rotonda che. Naturalmente si potrebbe implementare ILookup<TKey, TValue> con un involucro intorno al dizionario ...

+0

Grazie Jon! Esattamente quello che stavo cercando! –

14

Stesso metodo di Jon, ma evitando la creazione di un tipo anonimo:

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

Grazie signore! QUESTO è ciò che sembra essere C# :) –