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
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.