2017-11-27 8 views
0

C#specflowテーブルから辞書を作成したいと思います。私はこれをラベルの値として必要とし、値はすべてのフィーチャファイルに対して変更されます。現在のフィーチャファイルでは、2つのカラムがあります。specflowテーブルを辞書に変換

And I submit with following 
| Label   | Value    | 
| Namelabel  | texttoenter123  | 
| Email   |[email protected]  | 

対応するステップlinqを使用します。

[When(@"I submit with following ")] 

    public void WhenISubmitWithFollowing(Table table) 
     { 
     //Should be something like this , which convert the table todictionary object 
      var x = table.Rows.ToDictionary(k=>k.Keys,k=>k.Values); 
     }`` 

現在、私はこの場合にnullになっています。お手伝いください。

答えて

0

ごとに複数の値があれば、次のキー

  DataTable dt = new DataTable(); 
      dt.Columns.Add("Label", typeof(string)); 
      dt.Columns.Add("Value", typeof(string)); 


      dt.Rows.Add(new object[] { "Namelabel", "texttoenter123" }); 
      dt.Rows.Add(new object[] { "Email", "[email protected]" }); 

      Dictionary<string, string> dict = dt.AsEnumerable() 
       .GroupBy(x => x.Field<string>("Label"), y => y.Field<string>("Value")) 
       .ToDictionary(x => x.Key, y => y.FirstOrDefault()); 

利用ごとに1つだけの価値がある場合は、次の試してみてください。

var x = table.Rows.ToDictionary(r => r[0], r => r[1]); 

その他:

var x = table.Rows.ToDictionary(r => r["Label"], r => r["Value"]); 
+0

これは私が探していたものです。ありがとう – Shanti

0

あなたは、テーブルの列見出しと柔軟になりたい場合は、キー

  Dictionary<string, List<string>> dict = dt.AsEnumerable() 
       .GroupBy(x => x.Field<string>("Label"), y => y.Field<string>("Value")) 
       .ToDictionary(x => x.Key, y => y.ToList()); 
+0

フィーチャファイルから渡されたすべての値に対して辞書を再利用できるように、テーブルを汎用ディクショナリに変換したいと考えています。 – Shanti

関連する問題