2016-12-07 9 views
1

ハードコードされた文字列または文字列変数から値を取得するDataRowを作成しようとしています。コレクションの値であるSystem.Collections.Generic.Dictionary<string, double>.ValueCollectionの残りの値を特定する必要があります。私の試みでは、私は配列にキャストしていますが、うまくいきません。値のコレクションからDataRowアイテムを追加する

DataTable source = new DataTable(); 

foreach (string sample in GridSource.SampleName) 
{ 
    SampleDictionaries sd = GridSource.Data.Where(x => GridSource.Data.IndexOf(x) == GridSource.SampleName.IndexOf(sample)).First(); 
    source.Rows.Add(sample, "Average", sd.Avg.Values.ToArray()); 
    source.Rows.Add("", "Std. Deviation", sd.StdDev.Values.ToArray()); 
} 

上記のコードは、この生成します enter image description here

は、私がここで何が起こっているのか理解しています。私の質問はこれです:DataRowに "このコレクションで残りの列の値を入力する"と言う簡単な方法はありますか、それを行うにはいくつかのループを考えなければなりませんか?

+0

私は '.Addを考える(新しいオブジェクト[] {サンプル、「平均」} .Concat(sd.Avg.Values.Cast ().ToArray()); '動作する必要があります、'キャスト 'が必要ないかもしれません。 – KMoussa

+0

@KMoussaああ、良いコードのように見えますが、それはそれをしませんでした。私は必要としています。私はそれを手直しして、私ができることを見ていきます。 – Sam07

答えて

0

KMoussaの助けを借りて回答が見つかりました!

source.Rows.Add(new object[] { "", "Std. Deviation"}.Concat(sd.StdDev.Values.Cast<object>().ToArray()).ToArray()); 

彼がお勧めしたものと非常によく似ていますが、最後に2番目のキャストが欠けていました。

2

あなたができることは、datatable.NewRow()メソッドから行を作成することです。あなたが行のアイテム配列を有することができ、データの配列等しく:

DataTable source = new DataTable(); 

foreach (string sample in GridSource.SampleName) 
{ 
    DataRow temp = source.NewRow(); 
    SampleDictionaries sd = GridSource.Data.Where(x => GridSource.Data.IndexOf(x) == GridSource.SampleName.IndexOf(sample)).First(); 
    temp.ItemArray = new object[]{sample, "Average"}.Concat(sd.Avg.Values.ToArray()); 
    source.Rows.Add(temp); 
    temp = source.NewRow(); 
    temp.ItemArray = new object[]{"", "Std. Deviation".Concat(sd.StdDev.Values.ToArray()); 
} 
+0

ありがとう!これは別の良い解決策です。 – Sam07

関連する問題