2016-08-01 4 views
3
にリストして、グループをマージする

マイリスト構造がある:です。KeyValueペアがどのようにLINQ

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] 

以下List<KeyValuePair<string, List<int>>

一覧Q:私は同じキーのすべての値をマージするにはどうすればよいです、以下のように重複も削除します。

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

私は、彼らは罰金どのグループ、最初のグループ彼らにしようとしていますが、私は、単一のキーに、さらにそれらをマージすることができません。

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

@MurrayFoxcroftを容易にするためにちょうどあります:あなたは質問のポイントを逃しているように見えます。要点は、複数の「ページA」エントリの値を組み合わせる必要があることです。質問そのもののすぐ下の出力例を参照してください。 – Chris

答えて

6

によってグループ化した後、あなたのKeyあなたは別の記録から得たすべてのコレクションをマージするSelectManyを使用する必要があります。その後、Distinctに電話することができます。

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

追加.ToList() sがデバッグに

関連する問題