2017-10-25 4 views
-1

私はLINQクエリを学習しており、1つの場所で立ち往生しています。グループバイヤーをLINQで辞書に作成する方法

int  Generic List of int 
1   12,13,15 
2   12,16 

ので、より多くの私はidGroupに基づいてことによってそれを辞書が、グループを作成するように:私は、私は以下のような結果を

idGroup idUnit Status 
    1  12  foo 
    1  13  bar 
    1  15  hello 
    2  12  nofoo 
    2  16  nohello 

以下のようなstrongly typed datatableをすることを考えてみましょう。

私の試み:

Dictionary<int, List<int>> temp = Mydatatable.ToDictionary(p => p.idGroup, p => p.idUnit); 

がエラー:の

Dictionary<int, List<int>> temp = Mydatatable.ToDictionary(p => p.idGroup, 
                  p => p.idUnit.ToList()); 
+1

'Mydatatable.GroupBy(X => x.idGroup)を'使用するのですか? 'Mydatatable.ToLookup(x => x.idGroup)'? –

+0

@ L.B:私は自分の質問を編集しました。私は3列ありますが、私は2列しか必要ありません。元のデータテーブルを一度ご覧ください。 – Unbreakable

+0

unbreakable、groupbyはあなたのタイプのIEnumerableを返します。だからあなたが望むものを「選択」してください –

答えて

3

まず:LINQは私<int>, <int>を返しますが、私の予想結果は<int>, List<int> .`

である上、私は以下のような何かをしたいですすべてのエラーは、お客様のToDictionaryに指定された値がidUnitであり、これはですなくその後その後List<int>(例えばp => new List<int> { p.idUnit }を書くことがそのエラーを解決します)

辞書を出力する第一GroupBy、その後ToDictionary。それ以外の場合は、指定されたキーが辞書にすでに存在することを示す例外が発生します。

var result = Mydatatable.GroupBy(key => key.idGroup, val => val.idUnit) 
         .ToDictionary(key => key.Key, val => val.ToList()); 

別のオプションは、代わりにDictionaryLookupだけ

var result = Mydatatable.ToLookup(p => p.idGroup, p => p.idUnit); 
+0

@ Unbreakable - アップデートは与えられた答えに違いをもたらすべきではありません –

+0

ありがとうございました。私は今あなたの解決策を試しています。それに応じて私の疑問を更新/尋ねます。 :) – Unbreakable

+0

あなたの解決策にはわずかな見落としがあるようです。コード 'val => idUnit'は' val => val.idUnit'に置き換える必要があります。親切に – Unbreakable

関連する問題