2009-09-27 13 views
8

Tengo dos variables de tipo ILookup. Quería usar Union o Concat para combinar sus valores y asignar el resultado a una tercera variable del mismo tipo. Tanto Union como Concat devuelven IGrouping. ¡Debe ser muy sencillo convertir IGrouping en ILookup pero simplemente no puedo hacerlo! :-(IGrouping expone solo la clave, así que estoy luchando con el segundo parámetro de la búsqueda .... Cualquier ayuda será muy, muy apreciada.LINQ Convertir de IGrouping a la búsqueda

Respuesta

9

Creo que primero tendrá que aplanar las secuencias, para usar ToLookup:

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

que utiliza la forma de SelectMany que toma dos delegados: uno para convertir un elemento de la secuencia original a una colección, y otro para tomar un elemento de la colección original (es decir, el grupo) y una ítem en la colección devuelta (es decir, los ítems que coinciden con la clave de ese grupo) para llegar al ítem resultante. Esta es la manera más simple (¡creo!) de aplanar una agrupación en una secuencia de ítems con sus claves .

Lo anterior no ha sido probado, por lo que podría ser completamente incorrecto. También es relativamente ineficiente ... es una pena que no haya forma de construir una instancia de Lookup directamente. Podría implementar ILookup usted mismo, por supuesto.

Cuestiones relacionadas