2009-09-27 8 views
8

J'ai deux variables de type ILookup. Je voulais utiliser Union ou Concat pour combiner leurs valeurs et assigner le résultat à une troisième variable du même type. Union et Concat retournent IGrouping. Il doit être très simple de convertir IGrouping en ILookup mais je ne peux pas le faire !!! :-(IGrouping expose juste la clé donc je me bats avec le deuxième paramètre de la recherche ... Toute aide sera beaucoup, très appréciéeLINQ Convertir de IGrouper en Recherche

Répondre

9

Je pense que vous devrez d'abord aplatir les séquences, à utiliser ToLookup:

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

qui utilise la forme d'SelectMany qui prend deux délégués: une pour convertir un élément dans la séquence d'origine à une collection, et un autre pour prendre un élément de la collection d'origine (le groupe) et un élément de la collection retournée (c'est-à-dire les éléments correspondant à la clé de ce groupe) pour arriver à l'élément de résultat.C'est la manière la plus simple (je pense!) d'aplatir un groupement en une séquence d'éléments avec leurs clés. .

Ce qui précède n'a pas été testé, donc pourrait être complètement faux. C'est aussi relativement inefficace ... c'est dommage qu'il n'y ait aucun moyen de construire une instance de Lookup directement. Vous pouvez implémenter ILookup vous-même, bien sûr.

Questions connexes