2017-08-16 9 views
0

私はテキストファイルのリストを持っています。それぞれを読んでいます。分割オプションの助けを借りて5列(IDなし)のデータテーブル(Name:tbl)を作成しています。C# - 2 DataTableの列から辞書 - 別の値

また、Column1とColumn5のみでデータテーブルを作成し、これをcolumn1のような辞書に変換することがキーとなり、column5がその値になります。

は、次のコードです:

 string[] selectedColumns = new[] { "Column1", "Column5" }; 
     DataTable dt = new DataView(tbl).ToTable(false, selectedColumns); 

     dict = dt.AsEnumerable().ToDictionary<DataRow, string, string>(row => row[0].ToString(), 
            row => row[1].ToString()); 

エラー:{ "すでに追加されている同じキーを持つ項目"} $例外のSystem.Exception {} System.ArgumentExceptionの

重複により発生したエラー。

dict = dt.AsEnumerable().Distinct().ToDictionary<DataRow, string, string>(row => row[0].ToString(), 
           row => row[1].ToString()); 

結果は同じである。暗黙的に型 'System.Collections.Generic.Dictionary' から 'System.Collections.Generic.IEnumerable>' に変換できませんエラー1:

dict = dt.AsEnumerable().ToDictionary<DataRow, string, string>(row => row[0].ToString(), 
              row => row[1].ToString()).Distinct(); 

はエラーをスローします。明示的な変換があります(キャストがありませんか?)

重複を避けて、別の値だけを辞書の辞書に入れることはできますか?

ありがとうございました。

dict = dt.AsEnumerable().GroupBy(x=> x.<yourColumnName>) 
    .Select(group => group.First()); 

、その後、辞書にロード:

+0

を試してみてくださいDictionary

に変換する必要がありますが、1列内の指定された値は常に列5に同じ値を持つことが保証されていますか? – Chris

答えて

1

は、あなたがこの

  dict = dt.AsEnumerable().Select(row => new 
      { 
       attribute1_name = row.Field<string>(selectedColumns[0]), 
       attribute2_name = row.Field<string>(selectedColumns[1]) 
      }).Distinct().ToDictionary(s => s.attribute1_name, s => s.attribute2_name); 
+0

同じエラーが発生します。 {"同じキーを持つ項目がすでに追加されています"} System.Exception {System.ArgumentException} – Tango

+0

重複するエントリの問題が残るように重複除外する前にディクショナリを作成しているため、これは役に立ちません。 ToDictionaryへの最初の呼び出しの前に異なる値を取得する必要があります。 – Chris

+0

@Tango編集された答えは、今すぐチェックしてください –

1

は、あなたがこのような何かを試すことができますように。エラー状態として

関連する問題