2016-08-01 11 views
3

Meine Liste Struktur ist: List<KeyValuePair<string, List<int>>Wie Gruppe in LINQ Listen fusionieren

Liste der unter KeyValue Paare

Key  Values 
[PageA] [1, 3, 4] 
[PageA] [1, 3, 5] 
[PageA] [1, 3, 4, 5, 6] 
[PageB] [1, 3, 4, 6] 
[PageC] [1, 3, 4] 
[PageC] [1, 3, 4, 5, 7] 

F: Wie fusionieren i alle Werte für den gleichen Schlüssel, Entfernen Sie auch Dubletten, wie unten.

[PageA] [1, 3, 4, 5, 6] 
[PageB] [1, 3, 4, 6] 
[PageC] [1, 3, 4, 5, 7] 

Ich versuche, sie zu gruppieren erste Frage, die sie in Ordnung, aber ich bin nicht in der Lage die weiter in einzelne Tasten zu verschmelzen.

var pages = pageData.GroupBy(p => p.Key) 
+0

@MurrayFoxcroft zu erleichtern: Sie scheinen den Punkt der Frage zu fehlen. Der Punkt ist, dass die Werte in den mehreren "Seite A" -Einträgen kombiniert werden müssen. Sehen Sie sich die Beispielausgabe direkt unter der Frage an. – Chris

Antwort

6

Nach Gruppierung von Ihrem Key Sie SelectMany verwenden sollten alle Sammlung Sie aus den verschiedenen Datensätzen bekam zu verschmelzen. Danach können Sie Distinct anrufen.

var result = pageData.GroupBy(item => item.Key) 
        .Select(group => new 
        { 
         Key = group.Key, 
         Values = group.SelectMany(item => item.Value).Distinct().ToList() 
        }).ToList(); 

Die zusätzlichen .ToList() s gibt es nur im Debug-