2009-09-27 5 views
8

Ho due variabili di tipo ILookup. Volevo usare Union o Concat per combinare i loro valori e assegnare il risultato a una terza variabile dello stesso tipo. Sia Union che Concat restituiscono l'IGrouping. Deve essere semplicemente semplice convertire IGrouping in ILookup ma non posso farlo !!! :-(L'operazione di raggruppamento espone solo la chiave, quindi sono alle prese con il secondo parametro della ricerca .... Qualsiasi aiuto sarà molto, molto apprezzatoLINQ Converti da IGrouping a Lookup

risposta

9

Penso che dovrai prima appiattire le sequenze, per usare ToLookup:

var lookup = first.Concat(second) 
        .SelectMany(group => group, 
           (group, item) => new { Key = group.Key, 
                Item = item }) 
        .ToLookup(x => x.Key, x => x.Item); 

che utilizza la forma di SelectMany che prende due delegati: uno per convertire un elemento nella sequenza originale per una collezione, e un altro di prendere un elemento dell'insieme originale (cioè il gruppo) e un elemento nella raccolta restituita (cioè gli elementi che corrispondono alla chiave di quel gruppo) per ottenere l'elemento risultato. Questo è il modo più semplice (credo!) di appiattire un raggruppamento in una sequenza di elementi con le loro chiavi .

Quanto sopra non è testato, quindi potrebbe essere completamente sbagliato. È anche relativamente inefficiente ... è un peccato che non ci sia modo di costruire direttamente un'istanza di Lookup. Potresti implementare lo ILookup da solo, naturalmente.